Cod sursa(job #2736752)

Utilizator FrostfireMagirescu Tudor Frostfire Data 3 aprilie 2021 20:40:38
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 10000

using namespace std;

ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");

int n, m, k, r[NMAX+10], l[NMAX+10], ans, viz[NMAX+10];
vector <int> nod[NMAX+10];

int dfsCuplaj(int x)
{	viz[x] = 1;
	for(auto u : nod[x])
		if(!r[u] || (!viz[r[u]] && dfsCuplaj(r[u])))
			{	r[u] = x;
				l[x] = u;
				return 1;
			}
	return 0;
}

int main()
{
	fin >> n >> m >> k;
	for(int i=1; i<=k; i++)
		{	int nod1, nod2;
			fin >> nod1 >> nod2;
			nod[nod1].push_back(nod2);
		}
	int ok = 1;
	while(ok)
		{	ok = 0;
			for(int i=1; i<=n; i++)
				viz[i] = 0;
			for(int i=1; i<=n; i++)
				if(!viz[i] && !l[i])
					{	int nr = dfsCuplaj(i);
						ok = max(ok, nr);
						ans += nr;
					}
		}
	fout << ans << '\n';
	for(int i=1; i<=n; i++)
		if(l[i])
			fout << i << ' ' << l[i] << '\n';
	return 0;
}