Cod sursa(job #339404)

Utilizator razvi9Jurca Razvan razvi9 Data 9 august 2009 17:53:28
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<cstdio>
#include<vector>

int dr[10001],viz[10001],st[10001];
::std::vector<int> a[10001];
int n,m,k,i,nr;

int cupleaza(int x)
{
	int i;
	if(viz[x]) return 0;
	viz[x] = 1;
	for(i=0;i<a[x].size();++i)
		if(!st[a[x][i]] || cupleaza(st[a[x][i]]))
		{
			st[a[x][i]] = x;
			dr[x] = a[x][i];
			return 1;
		}
	return 0;
}

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