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 }