http://poj.org/problem?id=1274
二分图匹配,匈牙利算法(dfs+二维数组模拟邻接链表)
裸题,不用自己建图,用邻接链表试了一下
1 #include <stdio.h> 2 #include <string.h> 3 4 int n, m; 5 int list[210][210], girl[210], flag[210]; 6 7 int find(int x) 8 { 9 int i; 10 for(i=1; i<=list[x][0]; i++) 11 { 12 if(!flag[list[x][i]]) 13 { 14 flag[list[x][i]] = 1; 15 if(girl[list[x][i]]==-1 || find(girl[list[x][i]])) 16 { 17 girl[list[x][i]] = x; 18 return 1; 19 } 20 } 21 } 22 return 0; 23 } 24 25 int hungary() 26 { 27 int i, j, sum = 0; 28 for(i=1; i<=n; i++) 29 { 30 for(j=1; j<=n; j++) 31 { 32 flag[j] = 0; 33 } 34 sum += find(i); 35 } 36 return sum; 37 } 38 39 int main() 40 { 41 int i, j; 42 while(~scanf("%d%d", &n, &m)) 43 { 44 for(i=1; i<=n; i++) 45 { 46 girl[i] = -1; 47 scanf("%d", &list[i][0]); 48 for(j=1; j<=list[i][0]; j++) 49 { 50 scanf("%d", &list[i][j]); 51 } 52 } 53 printf("%d\n", hungary()); 54 } 55 return 0; 56 }