poj 3692 Kindergarten

把不认识的两两相连。

那么,最后所为最大独立集=n-最大匹配。。。

匈牙利算法:

#include <iostream>
using namespace std;int g[205][205];
int vis[205];
int link[205];
int gr,b,m;int dfs(int u)
{for(int i=1;i<=b;i++)if( !vis[i] && g[u][i] ){vis[i]=1;if( link[i]==-1 || dfs(link[i]) ){link[i]=u;return 1;}}return 0;
}int main()
{int t=1;while(scanf("%d %d %d",&gr,&b,&m)==3&&(gr||b||m)){memset(g,1,sizeof(g));for(int i=0;i<m;i++){int a,b;scanf("%d %d",&a,&b);g[a][b]=0;}int ans=0;memset(link,-1,sizeof(link));for(int i=1;i<=gr;i++){memset(vis,0,sizeof(vis));ans+=dfs(i);}printf("Case %d: %d\n",t++,gr+b-ans);}return 0;
}