pku1274 The Perfect Stall

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 }

 

 

posted @ 2013-01-14 12:53  Yuan1991  阅读(147)  评论(0编辑  收藏  举报