Cod sursa(job #550964)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 10 martie 2011 10:33:28
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<cstdio>
#include<cstring>
#include<vector>

using namespace std;

int i,j,n,m,e,r[10009],l[10009],u[10009],rez;

vector<int> a[10009];

int cupl(int i)
{
	if(u[i]) return 0;
	u[i]=1;
	
	for(int j=0;j<a[i].size();++j)
	{
		int fiu=a[i][j];
		
		if(!l[fiu]||cupl(l[fiu]))
		{
			l[fiu]=i;
			r[i]=fiu;
			return 1;
		}
	}
	return 0;
}

int main()
{
	freopen("cuplaj.in","r",stdin);
	freopen("cuplaj.out","w",stdout);
	
	scanf("%d%d%d",&n,&m,&e);
	
	for(i=1;i<=e;++i)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		a[x].push_back(y);
	}
	
	for(i=1;i<=n;++i)
	if(!r[i])
	{
		if(!cupl(i))
		{
			memset(u,0,sizeof(u));
			rez+=cupl(i);
		}
		else rez++;
	}
	
	printf("%d\n",rez);
	
	for(i=1;i<=n;++i) 
		if(r[i]>0)	printf("%d %d\n",i,r[i]);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}