poj 1274-The Perfect Stall解题报告
链接:http://poj.org/problem?id=1274
这道题是简单的二分图匹配问题,匈牙利算法,也是自己的第一道二分图匹配,一直搞不明白匈牙利算法的原理,但是看了程序就有些明白了,看来有的时候不仅仅要去看理论啊,做题也会加深理解的
View Code
1 #include<stdio.h> 2 #include<string.h> 3 #define N 205 4 bool map[N][N]; 5 bool used[N]; 6 int match[N]; 7 int n,m; 8 bool dfs(int u) 9 { 10 int i,v; 11 for(v=1;v<=m;v++) 12 { 13 if(!used[v]&&map[u][v]) 14 { 15 used[v]=true; 16 if(match[v]==0||dfs(match[v])) 17 { 18 match[v]=u; 19 return true; 20 } 21 } 22 } 23 return false; 24 } 25 void init() 26 { 27 memset(map,0,sizeof(map)); 28 memset(used,0,sizeof(used)); 29 memset(match,0,sizeof(match)); 30 } 31 int main() 32 { 33 int i,j,k; 34 int num,temp; 35 while(scanf("%d%d",&n,&m)!=EOF) 36 { 37 init(); 38 for(i=1;i<=n;i++) 39 { 40 scanf("%d",&num); 41 for(j=0;j<num;j++) 42 { 43 scanf("%d",&temp); 44 map[i][temp]=true; 45 } 46 } 47 int sum=0; 48 for(i=1;i<=n;i++) 49 { 50 memset(used,0,sizeof(used)); 51 if(dfs(i)) 52 sum++; 53 } 54 printf("%d\n",sum); 55 } 56 return 0; 57 }