/*============================================================================= # # Author: liangshu - cbam # # QQ : 756029571 # # School : 哈尔滨理工大学 # # Last modified: 2015-08-27 16:22 # # Filename: C.cpp # # Description: # The people who are crazy enough to think they can change the world, are the ones who do ! =============================================================================*/ # #include<iostream> #include<sstream> #include<algorithm> #include<cstdio> #include<string.h> #include<cctype> #include<string> #include<cmath> #include<vector> #include<stack> #include<queue> #include<map> #include<set> using namespace std; int N, K; const int INF = 505; int from[INF],tot; bool use[INF]; vector<int>G[INF]; bool match(int x){ for(int i = 0; i < G[x].size(); i++){ if(!use[G[x][i]]){ use[G[x][i]] = 1; if(from[G[x][i]] == -1 || match(from[G[x][i]])){ from[G[x][i]] = x; return 1; } } } return 0; } int hungary(){ tot = 0; memset(from, 255, sizeof(from)); for(int i = 1; i <= N; i++){ memset(use, 0, sizeof(use)); if(match(i)) ++tot; } return tot; } int main(){ while(scanf("%d%d",&N, &K) != EOF){ for(int i = 0; i < K; i++){ int a, b; scanf("%d%d",&a, &b); G[a].push_back(b); } int ans = hungary(); cout<<ans<<endl; for(int i = 0; i < INF; i++){ G[i].clear(); } } return 0; } /* 3 4 1 1 1 3 3 1 2 2 */
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 17878 | Accepted: 9742 |
Description
Input
Output
Sample Input
3 4 1 1 1 3 2 2 3 2
Sample Output
2
Hint
Source
版权声明:本文为博主原创文章,未经博主允许不得转载。
poj 3041 Asteroids (二分图最大匹配 == 最小点覆盖数)
原文地址:http://blog.csdn.net/lsgqjh/article/details/48029533