Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5783 Accepted Submission(s): 2677
#include<stdio.h> #include<string.h> #define MAX 1550 int map[MAX][MAX],vis[MAX],point[MAX]; int t; int find(int x) { int i; for(i=0;i<t;i++) { if(map[x][i]&&!vis[i]) { vis[i]=1; if(point[i]==0||find(point[i])) { point[i]=x; return 1; } } } return 0; } int main() { int i,j,s,n,m; int a; while(scanf("%d",&t)!=EOF) { memset(map,0,sizeof(map)); memset(point,0,sizeof(point)); for(i=0;i<t;i++) { scanf("%d:(%d)",&n,&m); for(j=0;j<m;j++) { scanf("%d",&a); map[n][a]=map[a][n]=1;//此处要将map[n][a]和map[a][n]同时标记 } } s=0; for(i=0;i<t;i++) { memset(vis,0,sizeof(vis)); if(find(i)) s++; } printf("%d\n",s/2);//因为上边双向同时标记所以s算重复了 所以要除以2 } return 0; }
hdoj 1054 Strategic Game【匈牙利算法+最小顶点覆盖】
原文:http://www.cnblogs.com/tonghao/p/4668577.html