Cod sursa(job #2739077)

Utilizator FrostfireMagirescu Tudor Frostfire Data 6 aprilie 2021 19:42:36
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 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, ans, viz[NMAX+10], l[NMAX+10], r[NMAX+10];
vector <int> nod[NMAX+10];

int dfsCuplaj(int x)
{	viz[x] = 1;
	for(auto u : nod[x])
		if(!l[u] || (!viz[l[u]] && dfsCuplaj(l[u])))
			{	l[u] = x;
				r[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(!r[i] && !viz[i])
					{	int nr = dfsCuplaj(i);
						ok |= nr;
						ans += nr;
					}
		}
	fout << ans << '\n';
	for(int i=1; i<=n; i++)
		if(r[i])
			fout << i << ' ' << r[i] << '\n';
	return 0;
}