最大团=补图最大独立集
when 补图是二分图时, 最大团=补图顶点数-最大匹配
// // main.cpp // poj3692 // // Created by Fangpin on 15/5/29. // Copyright (c) 2015年 FangPin. All rights reserved. // #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAXN=205; bool vis[MAXN]; int link[MAXN]; int B,G; int g[MAXN][MAXN]; bool dfs(int x){ for(int i=1;i<=B;++i){ if(g[x][i] && !vis[i]){ vis[i]=true; if(link[i]==-1 || dfs(link[i])){ link[i]=x; return true; } } } return false; } int hungry(){ int ans=0; memset(link,-1,sizeof(link)); for(int i=1;i<=G;++i){ memset(vis,false,sizeof(vis)); if(dfs(i)) ++ans; } return ans; } int main(int argc, const char * argv[]) { for(int ca=1;;++ca){ int m; scanf("%d%d%d",&G,&B,&m); if(G+B+m==0) break; memset(g,1,sizeof(g)); for(int i=0;i<m;++i){ int x,y; scanf("%d%d",&x,&y); g[x][y]=0; } cout<<"Case "<<ca<<": "<<G+B-hungry()<<endl; } return 0; }
时间: 2024-08-14 06:52:03