社区讨论

匈牙利算法18PTS求条

P2756飞行员配对方案问题参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@miu3n00z
此快照首次捕获于
2025/12/06 17:36
2 个月前
此快照最后确认于
2025/12/08 20:30
2 个月前
查看原帖
RT
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=105;
int e[N],h[N],ne[N],idx;
int mt[N];
bool st[N];
void add(int u,int v)
{
	e[idx]=v;
	ne[idx]=h[u];
	h[u]=idx++;
}
bool fnd(int u)
{
	for(int i=h[u];i!=-1;i=ne[i])
	{
		int j=e[i];
		if(!st[j])
		{
			st[j]=1;			
			if(fnd(mt[j])||!mt[j]) 
			{
				mt[j]=u;
				return true;
			}			
		}
	}
	return false;
}
int main()
{
	int m,n;
	cin>>m>>n;
	int u,v;
	memset(h,-1,sizeof h);
	while(1)
	{
		cin>>u>>v;
		if(u==-1&&v==-1)
			break;
		add(u,v);
	}
	int ans=0;
	for(int i=1;i<=m;i++)
	{
		memset(st,false,sizeof st);
		if(fnd(i)) ans++;
	}
	cout<<ans<<endl;
	for(int i=m+1;i<=n;i++)
	{
		cout<<mt[i]<<" "<<i<<endl;
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...