匈牙利板子求调
查看原帖
匈牙利板子求调
1057595
hair_loss_tree楼主2024/5/3 19:37
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,m,a,b,y;
int head[2*N],ver[20*N],nxt[20*N],tot;
int match[N],v[N],ans;
void add(int x,int y){
	ver[++tot]=y;nxt[tot]=head[x];head[x]=tot;
}
bool dfs(int x){
	for(int i=head[x];i;i=nxt[i]){
		if(!v[y=ver[i]]){
			v[y]=1;
			if(!match[y]||dfs(match[y])){
				match[y]=x;return true;
			}
		}
	}
	return false;
}
int main(){
	cin>>m>>n;
	while((cin>>a>>b)&&(a+b)!=-2)add(a,b);
	for(int i=1;i<=m;i++){
		memset(v,0,sizeof v);
		if(dfs(i))ans++;
	}
	cout<<ans<<endl;
	for(int i=m+1;i<=n;i++)if(match[i])cout<<match[i]<<" "<<i<<endl;
	return 0;
}

无语,这份码是如何把样例的9对到5上的

2024/5/3 19:37
加载中...