求救匈牙利WA72pts
查看原帖
求救匈牙利WA72pts
339299
osfly楼主2022/6/29 10:35
#include<cstdio>
#include<cstring>
struct edge
{
	int v,nxt;
}g[100000];
int head[2000],tot;
bool vis[2000];
int matched[2000];
void add(int u,int v)
{
	g[++tot].v=v;
	g[tot].nxt=head[u];
	head[u]=tot;
}
int n,m;
bool dfs(int x)
{
	for(int i=head[x];i;i=g[i].nxt)
	{
		int v=g[i].v;
		if(vis[v]) continue;
		vis[v]=1;
		if(!matched[v]||dfs(matched[v]))
		{
			matched[v]=x;
			return 1;
		}
	}
	return 0;
 } 
int match()
{
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		memset(vis,0,sizeof(vis));
		cnt+=dfs(i);
	 } 
	return cnt;
}
int main()
{
	int u,v;
	scanf("%d%d",&n,&m);
	while(scanf("%d%d",&u,&v)&&!(u==-1&&v==-1))
	{
		scanf("%d%d",&u,&v);
		add(u,v);
	}
	printf("%d\n",match());
	for(int i=n+1;i<=m;i++)
		if(matched[i])
			printf("%d %d\n",matched[i],i);
	return 0;
}
2022/6/29 10:35
加载中...