poj 3692 二分图最大匹配
思路:
如果我们将认识的建边,求最大独立集就是互相不认识的人数。那么我们反过来,将不认识的建图,求最大独立集就是互相认识的人数。
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #define Maxn 210 int graphic[Maxn][Maxn],vi[Maxn],match[Maxn],n,m; int dfs(int u) { int i; for(i=1;i<=m;i++) { if(!vi[i]&&graphic[u][i]) { vi[i]=1; if(match[i]==-1||dfs(match[i])) { match[i]=u; return 1; } } } return 0; } int main() { int i,j,k,Case=1,a,b; while(scanf("%d%d%d",&n,&m,&k),n||m||k) { memset(match,-1,sizeof(match)); memset(graphic,1,sizeof(graphic)); for(i=1;i<=k;i++) { scanf("%d%d",&a,&b); graphic[a][b]=0; } int ans=0; for(i=1;i<=n;i++) { memset(vi,0,sizeof(vi)); if(dfs(i)) ans++; } printf("Case %d: %d\n",Case++,n+m-ans); } return 0; }