Pagini recente » Cod sursa (job #764180) | Cod sursa (job #436351) | Cod sursa (job #867451) | Cod sursa (job #2569706) | Cod sursa (job #1723727)
#include <cstdio>
#include <vector>
using namespace std;
#define MAXN 10000
vector <int> G[MAXN+1];
int pereche[2*MAXN+1];
int con;
int vf[2*MAXN+1];
int myfind(int nod){
int i,x,l;
i=0;
l=G[nod].size();
while(i<l&&pereche[G[nod][i]]>0)
i++;
vf[nod]=con;
if(i==l){
i=0;
while(i<l){
x=pereche[G[nod][i]];
if(vf[x]<con&&myfind(x)==1){
pereche[G[nod][i]]=nod;
pereche[nod]=G[nod][i];
return 1;
}
i++;
}
return 0;
}
else{
pereche[G[nod][i]]=nod;
pereche[nod]=G[nod][i];
return 1;
}
}
int main(){
FILE*fi,*fout;
int N,M,E,i,x,y;
fi=fopen("cuplaj.in" ,"r");
fout=fopen("cuplaj.out" ,"w");
fscanf(fi,"%d%d%d" ,&N,&M,&E);
for(i=0;i<E;i++){
fscanf(fi,"%d%d" ,&x,&y);
y+=N;
G[x].push_back(y);
}
con=1;
int flag=1;
while(flag==1){
flag=0;
for(i=1;i<=N;i++)
if(pereche[i]==0){
if(flag==0)
flag=myfind(i);
else
myfind(i);
}
con++;
}
con=0;
for(i=1;i<=N;i++)
if(pereche[i]>0)
con++;
fprintf(fout,"%d\n" ,con);
for(i=1;i<=N;i++)
if(pereche[i]>0)
fprintf(fout,"%d %d\n" ,i,pereche[i]-N);
fclose(fi);
fclose(fout);
return 0;
}