很裸的匈牙利算法。
#include<stdio.h>
#include<string.h>
//const int l=501;
int mark[500],link[500],map[500][500];
int n,count,num,k,tot;
char c;
bool dfs(int i)
{
//cout<<121<<endl;
for(int j=0;j<n;j++)
{
//cout<<122<<endl;
if(mark[j]==0&&map[i][j]==1)
{
mark[j]=1;
//cout<<123<<endl;
if(link[j]==-1||dfs(link[j]))
{
//cout<<124<<endl;
link[i]=j;
link[j]=i;
return true;
}
}
}
return false;
}
int main()
{
//int n;
while(scanf("%d",&n)!=EOF)
{
memset(link,-1,sizeof(link));
memset(map,0,sizeof(map));
count=0;
for(int i=0;i<n;i++)
{
scanf("%d%c%c%c%d%c",&num,&c,&c,&c,&tot,&c);
for(int j=0;j<tot;j++)
{
scanf("%d",&k);
map[num][k]=1;
map[k][num]=1;
}
}
/* for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<map[i][j]<<" ";
cout<<endl;
} */
for(int i=0;i<n;i++)
{
if(link[i]==-1)
{
memset(mark,0,sizeof(mark));
if(dfs(i))
count++;
}
}
printf("%d\n",n-count);
}
return 0;
}
poj 1466 Girls and Boys
最新推荐文章于 2022-02-25 19:38:17 发布