Pagini recente » Cod sursa (job #1994886) | Cod sursa (job #322933) | Cod sursa (job #2653567) | Cod sursa (job #2125679) | Cod sursa (job #1688798)
#include<cstdio>
#include<vector>
using namespace std;
int a,b,n1,n2,m,nr;
vector<int>v[10001];
int prec[10001],next[10001];
bool viz[10001];
bool cupl(int nod){
if(viz[nod]==true)
return false;
viz[nod]=true;
for(int i=0;i<v[nod].size();i++)
if(prec[v[nod][i]]==false){
prec[v[nod][i]]=nod;
next[nod]=v[nod][i];
nr++;
return true;
}
for(int i=0;i<v[nod].size();i++)
if(cupl(prec[v[nod][i]])==true){
prec[v[nod][i]]=nod;
next[nod]=v[nod][i];
return true;
}
return false;
}
int main(){
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&n1,&n2,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&a,&b);
v[a].push_back(b);
}
bool pp=true;
while(pp==true){
pp=false;
for(int i=1;i<=n1;i++)
viz[i]=false;
for(int i=1;i<=n1;i++)
if(next[i]==0)
if(cupl(i)==true)
pp=true;
}
printf("%d\n",nr);
for(int i=1;i<=n1;i++)
if(next[i]!=0)
printf("%d %d\n",i,next[i]);
return 0;
}