Pagini recente » Cod sursa (job #1152868) | Cod sursa (job #117571) | Monitorul de evaluare | Cod sursa (job #1656004) | Cod sursa (job #241737)
Cod sursa(job #241737)
#include <stdio.h>
#include <vector>
#include <bitset>
#define pb(a) push_back(a)
using namespace std;
long A,B,m,i,x,y,ok,L[10002],R[10002];
bitset <10002>mark;
vector <int>v[10002];
int newpair (int x){
int i,K,nod;
if (mark[x])return 0;
mark[x]=1;K=v[x].size();
for (i=0;i<K;++i){
nod=v[x][i];
if (!R[nod] || newpair(R[nod])){
L[x]=nod;
R[nod]=x;
return 1;
}
}
return 0;
}
int main(){
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%ld %ld %ld",&A,&B,&m);
for (;m;--m){
scanf("%ld %ld",&x,&y);v[x].pb(y);}
do{
ok=0;mark.reset();
for (i=1;i<=A;++i)
if (!L[i])ok+=newpair(i);
}while (ok);
for (i=1;i<=A;++i)if (L[i])ok++;
printf("%ld\n",ok);
for (i=1;i<=A;++i)if (L[i])printf("%ld %ld\n",i,L[i]);
return 0;
}