Bipartite Graph Match

 1 /****************************************************************************************************
 2           Target: Bipartite Graph Match (According to the problem named "star")  O(n*n)
 3           Author: Xue Zhonghao
 4           Date: 2014-3-11 19:15:20 
 5 ****************************************************************************************************/
 6 #include<cstdio>
 7 #include<cstdlib>
 8 #include<iostream>
 9 #include<fstream>
10 using namespace std;
11 ifstream fin("input.txt");
12 //ofstream fout("output.txt");
13 
14 #define clr(a,b) memset(a,b,sizeof(a))
15 
16 #define cin fin
17 //#define cout fout
18 
19 #define MAXA 500
20 #define MAXB 500
21 
22 int a[MAXA][MAXB];
23 int vis[MAXB];
24 int d[MAXB];
25 
26 int find(int k) {
27     for(int i = 1; i <= a[k][0]; ++i)
28       if(!vis[a[k][i]]) {
29         vis[a[k][i]] = 1;
30         if(d[a[k][i]] == 0 || find(d[a[k][i]])) {
31             d[a[k][i]] = k;
32             return 1;
33         }
34       }
35     return 0;
36 }
37 
38 int main(void)
39 {
40     int N, K;
41     cin>>N>>K;
42     int x, y;
43     for(int i = 0; i < K; ++i) {
44       cin>>x>>y;
45       a[x][++a[x][0]] = y;
46     }
47     int ans = 0;
48     for(int i = 1; i <= N; ++i) {
49       clr(vis, 0);
50       if(find(i)) ans++;
51     }
52     cout<<ans<<endl;
53     system("pause");
54     return 0;
55 }

 

posted on 2014-04-07 16:53  AlanXue  阅读(402)  评论(0编辑  收藏  举报

导航