http://poj.org/problem?id=1325
The minimum vertex cover bipartite graph
According to the Kőnig's theorem
The maximum matching problem and the minimum vertex cover problem are equivalent
so the problem is easy
just using the Hungarian algorithm to solve
but noticed that the machine is in 0 status
so when you build the graph through the adjacency list
you should not to add the edge with 0 vertex
code of AC:
#include<iostream>
#include<cstring>
using namespace std;
const int N=2e3+10;
int head[N],ver[N],Next[N],v[N],match[N];
int tot=0;
void add(int x,int y){
ver[++tot]=y;
Next[tot]=head[x];
head[x]=tot;
}
bool dfs(int x){
for(int i=head[x];i;i=Next[i]){
int y=ver[i];
if(v[y]) continue;
v[y]=1;
if(match[y]==0||dfs(match[y])){
match[y]=x;
return 1;
}
}
return 0;
}
int main(){
int n,m,k,a,b,c;
while(cin>>n&&n){
cin>>m>>k;
tot=0;
for(int i=0;i<N;++i){
head[i]=ver[i]=Next[i]=v[i]=match[i]=0;
}
for(int i=1;i<=k;++i){
cin>>a>>b>>c;
if(b*c)
add(b,c);
}
int ans=0;
for(int i=0;i<n;++i){
memset(v,0,sizeof v);
if(dfs(i)) ++ans;
}
cout<<ans<<endl;
}
}