HDU 2458 - Kindergarten

时间:2023-03-08 20:10:24
HDU 2458 - Kindergarten

有一堆男孩和女孩,男孩和男孩之间,女孩和女孩之间互相认识,给出一堆男孩女孩之间认识的关系,

问一个组里最多多少人相互都认识

那么

二分图里

将不认识的连线

那么 相互认识的人最多 就为 最大独立点集

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int map[][];
int link[];
int vis[];
int n,m,k,ans;
bool dfs(int t)
{
int x;
for(int i=;i<=m;i++)
{
if(!vis[i]&&!map[t][i])
{
vis[i]=;
if(link[i]==-||dfs(link[i]))
{
link[i]=t;
return ;
}
}
}
return ;
}
int main()
{
int i,j,a,b,t=;
while(~scanf("%d%d%d",&n,&m,&k)&&(n+m+k))
{
memset(map,,sizeof(map));
for(i=;i<=k;++i)
{
scanf("%d%d",&a,&b);
map[a][b]=;
}
memset(link,-,sizeof(link));
ans=;
for(i=;i<=n;i++)
{
memset(vis,,sizeof(vis));
if(dfs(i)) ++ans;
}
ans=m+n-ans;
printf("Case %d: %d\n",++t,ans);
}
}