Pagini recente » Cod sursa (job #1836720) | Cod sursa (job #58152) | Cod sursa (job #2612347) | Cod sursa (job #977133) | Cod sursa (job #302120)
Cod sursa(job #302120)
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
vector <int> nr[10010];
int viz[10010];
int st[10010],dr[10010];
bool cupleaza(int x){
if(viz[x])
return false;
viz[x]=1;
for(int i=0;i<nr[x].size();++i){
if(!dr[nr[x][i]]){
st[x]=nr[x][i];
dr[nr[x][i]]=x;
return true;
}
}
for(int i=0;i<nr[x].size();++i){
if(cupleaza(dr[nr[x][i]])){
st[x]=nr[x][i];
dr[nr[x][i]]=x;
return true;
}
}
return false;
}
int main(){
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int n,e,m,i,x,y;
scanf("%d%d%d",&n,&m,&e);
for(i=0;i<e;++i){
scanf("%d%d",&x,&y);
nr[x].push_back(y);
}
int cuplaj=0;
for(i=1;i<=n;++i){
if(!st[i]){
if(!cupleaza(i)){
memset(viz,0,sizeof(viz));
cuplaj+=cupleaza(i);
}
else
++cuplaj;
}
}
printf("%d\n",cuplaj);
for(i=1;i<=n;++i){
if(st[i]>0)
printf("%d %d\n",i,st[i]);
}
fclose(stdin);
fclose(stdout);
return 0;
}