Pagini recente » Cod sursa (job #2172652) | Cod sursa (job #1812997) | Cod sursa (job #1437717) | Cod sursa (job #2484075) | Cod sursa (job #2368295)
#include <bits/stdc++.h>
using namespace std;
#define LMAX 10005
vector<int> G[LMAX];
int l[LMAX],r[LMAX],viz[LMAX];
bool pair_up(int nod){
if(viz[nod])
return 0;
viz[nod]=1;
for(auto it : G[nod])
if(!r[it]){
l[nod]=it;
r[it]=nod;
return 1;
}
for(auto it : G[nod])
if(pair_up(r[it])){
l[nod]=it;
r[it]=nod;
return 1;
}
return 0;
}
int main(){
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
int n,m,ct_edges;
scanf("%d %d %d",&n,&m,&ct_edges);
while(ct_edges--){
int from,to;
scanf("%d %d",&from,&to);
G[from].push_back(to);
}
bool ok=0;
do{
ok=0;
memset(viz,0,sizeof(viz));
for(int i=1;i<=n;++i)
if(!l[i]){
if(pair_up(i))
ok=1;
}
}while(ok);
int ans=0;
for(int i=1;i<=n;++i)
if(l[i]>0)
++ans;
printf("%d\n",ans);
for(int i=1;i<=n;++i)
if(l[i]>0)
printf("%d %d\n",i,l[i]);
return 0;
}