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


阅读更多
个人分类: 图论
想对作者说点什么? 我来说一句

Protocol Engineering

2015年06月09日 13.36MB 下载

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

不良信息举报

POJ 1325 Kőnig's Theorem

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭