HDU 2458 - Kindergarten
有一堆男孩和女孩,男孩和男孩之间,女孩和女孩之间互相认识,给出一堆男孩女孩之间认识的关系,
问一个组里最多多少人相互都认识
那么
二分图里
将不认识的连线
那么 相互认识的人最多 就为 最大独立点集
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 int map[205][205]; 6 int link[205]; 7 int vis[205]; 8 int n,m,k,ans; 9 bool dfs(int t) 10 { 11 int x; 12 for(int i=1;i<=m;i++) 13 { 14 if(!vis[i]&&!map[t][i]) 15 { 16 vis[i]=1; 17 if(link[i]==-1||dfs(link[i])) 18 { 19 link[i]=t; 20 return 1; 21 } 22 } 23 } 24 return 0; 25 } 26 int main() 27 { 28 int i,j,a,b,t=0; 29 while(~scanf("%d%d%d",&n,&m,&k)&&(n+m+k)) 30 { 31 memset(map,0,sizeof(map)); 32 for(i=1;i<=k;++i) 33 { 34 scanf("%d%d",&a,&b); 35 map[a][b]=1; 36 } 37 memset(link,-1,sizeof(link)); 38 ans=0; 39 for(i=1;i<=n;i++) 40 { 41 memset(vis,0,sizeof(vis)); 42 if(dfs(i)) ++ans; 43 } 44 ans=m+n-ans; 45 printf("Case %d: %d\n",++t,ans); 46 } 47 }
我自倾杯,君且随意