Pagini recente » Cod sursa (job #1174881) | Cod sursa (job #964176) | Cod sursa (job #2191149) | Cod sursa (job #273403) | Cod sursa (job #302063)
Cod sursa(job #302063)
#include<stdio.h>
#include<vector>
using namespace std;
vector <int> nr[10010];
char viz[10010];
int st[10010],dr[10010];
int cupleaza(int x){
if(viz[x])
return 0;
viz[x]=1;
for(vector<int>::iterator it=nr[x].begin();it!=nr[x].end();++it){
if(!dr[*it]){
st[x]=*it;
dr[*it]=x;
return 1;
}
}
for(vector<int>::iterator it=nr[x].begin();it!=nr[x].end();++it){
if(cupleaza(dr[*it])){
st[x]=*it;
dr[*it]=x;
return 1;
}
}
return 0;
}
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(!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])
printf("%d %d\n",i,st[i]);
}
fclose(stdin);
fclose(stdout);
return 0;
}