Cod sursa(job #953146)

Utilizator OpportunityVlad Negura Opportunity Data 25 mai 2013 01:42:25
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fi("cuplaj.in");
ofstream fo("cuplaj.out");

int i,nr,n,m,e,x,y,viz[10001],l[10001],r[10001];
vector< int > g[10001];

int p(int x)
{
	if (viz[x]) return 0;
	viz[x]=1;
	for (vector< int >::iterator it=g[x].begin(); it!=g[x].end(); it++)
	{
		if (!r[*it] || p(r[*it]))
		{
			l[x]=*it; r[*it]=x;
			return 1;
		}
	}
	return 0;
}

int main()
{
	fi >> n >> m >> e;
	while (e--)
	{
		fi >> x >> y;
		g[x].push_back(y);
	}
	
	int ok=1;
	while (ok)
	{
		ok=0;
		for (i=1; i<=n; i++) viz[i]=0;
		for (i=1; i<=n; i++)
		{
			if (!l[i])
				if (p(i))
					nr++,ok=1;
		}
	}
	
	fo << nr << endl;
	for (i=1; i<=n; i++)
		if (l[i])
			fo << i << ' ' << l[i] << endl;
	
	return 0;
}