您的位置:首页 > 其它

poj 1466 匈牙利算法呀~

2017-08-13 16:19 351 查看
仔细想了之后,这是求最大点独立集。
可是数据给的比较麻烦,没有给女生多少个,男生多少个,二这两个数据是匈牙利算法必要的数据啊~
于是出现了这个点击打开链接
人家解释的很好,我就不多啰嗦了。
AC代码:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn=5e2+10;

int N,K;
bool mp[maxn][maxn];

bool used[maxn];
int mate[maxn];
bool Findm(int x)
{
for(int i=0;i<N;i++)
{
if(!used[i]&&mp[x][i])
{
used[i]=1;
if(!mate[i]||Findm(mate[i]))
{
mate[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
while(scanf("%d",&N)==1&&N)
{
memset(mp,0,sizeof(mp));
for(int i=1;i<=N;i++)
{
int I,like;
scanf("%d: (%d) ",&I,&like);
for(int j=1;j<=like;j++)
{
int t;
scanf("%d",&t);
mp[I][t]=1;
}
}

int re=0;
memset(mate,0,sizeof(mate));
for(int i=0;i<N;i++)
{
memset(used,0,sizeof(used));
re+=Findm(i);
}
printf("%d\n",N-re/2);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: