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


阅读更多
个人分类: 图论
上一篇BZOJ 3223 SplayTree
下一篇POJ 2226 Kőnig's Theorem
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭