匈牙利算法72pts求调
查看原帖
匈牙利算法72pts求调
558324
AutiFancers楼主2024/1/29 09:49

rt

#include<bits/stdc++.h>
using namespace std;

const int N=505,M=1e5+5;

int n1,n2,m;
int h[N],e[M],ne[M],idx; 
int match[N];
bool st[N];

void add(int a,int b){
	e[idx]=b;
	ne[idx]=h[a];
	h[a]=idx++;
}

bool find(int x){
	for(int i=h[x];i!=-1;i=ne[i]){
		int j=e[i];
		if(!st[j]){
			st[j]=true;
			if(match[j]==0 || find(match[j])){
				match[j]=x;
				return true;
			}
		}
	}
	return false;
}

int main(){
	cin>>n1>>m;
	n2=m-n1; 
	
	memset(h,-1,sizeof h);
	
	int x,y; 
	while(cin>>x>>y && x!=-1 && y!=-1){
		int a,b;
		cin>>a>>b;
		add(a,b);
	}
	int res=0;
	for(int i=1;i<=n1;i++){
		memset(st,false,sizeof st);
		if(find(i)) res++;
	}
	cout<<res<<'\n'; 

	for(int i=1;i<=m;i++) 
		if(match[i])
			cout<<i<<" "<<match[i]<<'\n';
	
	
	return 0;
}
2024/1/29 09:49
加载中...