http://poj.org/problem?id=1274
这道题目与1469是一样的,我感觉连输出形式都差不多。只不过这里是牛与什么的匹配,同样,把他们分别用两个集合来保存,然后用匈牙利算法来求得最大匹配数
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 using namespace std;
5 #define N 210
6 int map[N][N],m[N],v[N];
7 int n,mm;
8 int dfs(int x)
9 {
10 int i;
11 for(i=1;i<=mm;i++)
12 {
13 if(!v[i]&&map[x][i])
14 {
15 v[i]=1;
16 if(m[i]==-1||dfs(m[i]))
17 {
18 m[i]=x;
19 return 1;
20 }
21 }
22 }
23 return 0;
24 }
25 int find()
26 {
27 int i;
28 int num=0;
29 for(i=1;i<=mm;i++)
30 {
31 memset(v,0,sizeof(v));
32 if(dfs(i)) num++;
33 }
34 return num;
35 }
36 int main()
37 {
38 int t,x,i;
39 while(cin>>n>>mm)
40 {
41 memset(map,0,sizeof(map));
42 memset(m,-1,sizeof(m));
43 for(i=1;i<=n;i++)
44 {
45 cin>>t;
46 while(t--)
47 {
48 cin>>x;
49 map[i][x]=1;
50 }
51 }
52 int ans=find();
53 cout<<ans<<endl;
54 }
55 return 0;
56 }