Cod sursa(job #562438)

Utilizator proflaurianPanaete Adrian proflaurian Data 23 martie 2011 06:58:54
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<cstdio>
#include<vector>
#define FOR for(it=v[nod].begin();it!=v[nod].end();it++)
#define For for(int i=1;i<=n;i++)
#define IO freopen("cuplaj.in","r",stdin);freopen("cuplaj.out","w",stdout);
using namespace std;
void read(),solve();
int n,m,e,C,S[10010],D[10010],V[10010],creste(int),OK();
vector<int> v[10010];
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	int x,y;
	IO scanf("%d%d%d",&n,&m,&e);
	for(;e;e--){scanf("%d%d",&x,&y);v[x].push_back(y);}
}
void solve()
{
	for(;OK(););printf("%d\n",C);For if(D[i])printf("%d %d\n",i,D[i]);
}
int OK()
{
	int ret=0;For V[i]=0;For if(!D[i]&&creste(i)){C++;ret=1;} return ret;
}	
int creste(int nod)
{
	vector<int>::iterator it;if(V[nod])return 0;V[nod]=1;
	FOR if(!S[*it]){D[nod]=*it;S[*it]=nod;return 1;}
	FOR	if(creste(S[*it])){D[nod]=*it;S[*it]=nod;return 1;}
	return 0;
}