POJ 1325 Kőnig's Theorem

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;
	}
}


猜你喜欢

转载自blog.csdn.net/gipsy_danger/article/details/80322072