匈牙利二分图 36 分,1 WA,5 RE
查看原帖
匈牙利二分图 36 分,1 WA,5 RE
585657
lanxi楼主2023/6/28 11:21
#include <cmath>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
vector <int> a[500008];
int b[500008];
int vis[500008];

bool findv(int t,int ji)
{
	if(vis[t] == ji)
	{
		return false;
	}
	vis[t] = ji;
	for(int i = 0;i < a[t].size();i++)
	{
		int u = a[t][i];
		if(b[u] == 0)
		{
			b[u] = t;
			return true;
		}
		else
		{
			if(findv(b[u],ji))
			{
				b[u] = t;
				return true;
			}
		}
	}
}

int main()
{
	int m,n;
	scanf("%d %d",&m,&n);
	int u,v;
	scanf("%d %d",&u,&v);
	while(u != -1&&v != -1)
	{
		a[u].push_back(v);
		scanf("%d %d",&u,&v);
	}
	int cnt = 0;
	for(int i = 1;i <= m;i++)
	{
		if(findv(i,i))
		{
			cnt++;
		}
	}
	printf("%d\n",cnt);
	for(int i = m+1;i <= n;i++)
	{
		if(b[i] != 0)
		{
			printf("%d %d\n",b[i],i);
		}
	}
    return 0;
}
2023/6/28 11:21
加载中...