Cod sursa(job #953145)

Utilizator OpportunityVlad Negura Opportunity Data 25 mai 2013 01:38:28
Problema Cuplaj maxim in graf bipartit Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 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];
vector< int >::iterator it;

int p(int x)
{
	if (viz[x]) return 0;
	viz[x]=1;
	for (size_t k=0; k<g[x].size(); k++)
	{
		if (!r[g[x][k]] || p(r[g[x][k]]))
		{
			l[x]=g[x][k]; r[g[x][k]]=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] && p(i))
				nr++,ok=1;
		}
	}
	
	fo << nr << endl;
	for (i=1; i<=n; i++)
		if (l[i])
			fo << i << ' ' << l[i] << endl;
	
	return 0;
}