Cod sursa(job #3243297)

Utilizator hhhhhhhAndrei Boaca hhhhhhh Data 17 septembrie 2024 11:18:35
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,cuplaj,e,use[10005];
int l[10005],r[10005];
vector<int> muchii[10005];
bool pairup(int nod)
{
	if(use[nod])
		return 0;
	use[nod]=1;
	for(int i:muchii[nod])
		if(r[i]==0)
		{
			l[nod]=i;
			r[i]=nod;
			return 1;
		}
	for(int i:muchii[nod])
		if(pairup(r[i]))
		{
			l[nod]=i;
			r[i]=nod;
			return 1;
		}
	return 0;
}
int main()
{
	ios_base::sync_with_stdio(false);
	fin.tie(0);
	fin>>n>>m>>e;
	for(int i=1;i<=e;i++)
	{
		int a,b;
		fin>>a>>b;
		muchii[a].push_back(b);
	}
	bool ok=0;
	do
	{
		ok=0;
		for(int i=1;i<=n;i++)
			use[i]=0;
		for(int i=1;i<=n;i++)
			if(l[i]==0)
				ok|=pairup(i);
	}while(ok);
	for(int i=1;i<=n;i++)
		if(l[i])
			cuplaj++;
	fout<<cuplaj<<'\n';
	for(int i=1;i<=n;i++)
		if(l[i])
			fout<<i<<' '<<l[i]<<'\n';
	return 0;
}