题目链接:http://poj.org/problem?id=1469 

复习了下二分图最大匹配,找了道水题。。

水题的样例真水,打错一个字母都能过样例。。。。

 

关于二分图最大匹配的资料见:http://www.cnblogs.com/pony1993/archive/2012/07/25/2607738.html 

 

思路:只要最大匹配数=课程数就OK

 

代码:

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 const int N=1001;
 6 int n1,n2,k;
 7 int map[N][N],vis[N],link[N];
 8 int find(int x)
 9 {
10     int i;
11     for(i=0;i<=n2;i++)
12     {
13         if(map[x][i]&&!vis[i])
14         {
15             vis[i]=1;
16             if(link[i]==0||find(link[i]))
17             {
18                 link[i]=x;
19                 return 1;
20             }
21         }
22     }
23     return 0;
24 }
25 int main()
26 {
27     int t,i,n,x,sum;
28     scanf("%d",&t);
29     while(t--)
30     {
31         memset(map,0,sizeof(map));
32         memset(link,0,sizeof(link));
33         sum=0;
34         scanf("%d%d",&n1,&n2);
35         for(i=1;i<=n1;i++)
36         {
37             scanf("%d",&n);
38             while(n--)
39             {
40                 scanf("%d",&x);
41                 map[i][x]=1;
42             }
43         }
44         for(i=1;i<=n1;i++)
45         {
46             memset(vis,0,sizeof(vis));
47             if(find(i))
48                 sum++;
49         }
50         if(sum==n1)
51             puts("YES");
52         else
53             puts("NO");
54     }
55     return 0;
56 }


posted on 2012-08-13 14:54  pony1993  阅读(1067)  评论(0编辑  收藏  举报

View My Stats