/*=============================================================================
#
# 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