Cod sursa(job #974831)

Utilizator Kira96Denis Mita Kira96 Data 18 iulie 2013 14:45:28
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<fstream>
#include<cstring>
#include<vector>
#define NM 11000
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int n,m,j,i,L[NM],R[NM],x,ok,y,nr;
bool viz[NM];
vector<int> v[NM];
int cuplaj(int x)
{
	if(viz[x])return 0;
	viz[x]=1;
	for(int i=0;i<v[x].size();++i)
		if(!R[v[x][i]])
		{
			L[x]=v[x][i];
			R[v[x][i]]=x;
			return 1;
		}
	for(int i=0;i<v[x].size();++i)
		if(cuplaj(R[v[x][i]]))
		{
			L[x]=v[x][i];
			R[v[x][i]]=x;
			return 1;
		}
	return 0;
}
int main ()
{
	f>>n>>m>>m;
	while(m--)
	{
		f>>x>>y;
		v[x].push_back(y);
	}
	ok=1;
	while(ok)
	{
		ok=0;
		memset(viz,0,n+1);
		for(j=1;j<=n;++j)
			if(!L[j])
				if(cuplaj(j))
				{
					ok=1;
					nr++;
				}
	}
	g<<nr<<"\n";
	for(i=1;i<=n;++i)
		if(L[i])
			g<<i<<" "<<L[i]<<"\n";
	return 0;
}