Pagini recente » Cod sursa (job #768918) | Cod sursa (job #309446) | Cod sursa (job #1482391) | Monitorul de evaluare | Cod sursa (job #3334289)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,e,l[10002],r[10002],use[10002];
vector<int>G[10002];
bool pairup(int nod){
if(use[nod])return 0;
use[nod]=1;
for(int i=0;i<G[nod].size();i++){
if(!r[G[nod][i]]){
l[nod]=G[nod][i];
r[G[nod][i]]=nod;
return 1;
}
}
for(int i=0;i<G[nod].size();i++)
if(pairup(r[G[nod][i]])){
l[nod]=G[nod][i];
r[G[nod][i]]=nod;
return 1;
}
return 0;
}
int main()
{
fin>>n>>m>>e;
for(int i=1;i<=e;i++){
int a,b;
fin>>a>>b;
G[a].push_back(b);
}
bool ok=0;
do{
ok=0;
for(int i=1;i<=n;i++)
use[i]=0;
for(int i=1;i<=n;i++)
if(!l[i])
ok|=pairup(i);
}while(ok);
int nrsol=0;
for(int i=1;i<=n;i++){
if(l[i])nrsol++;
}
fout<<nrsol<<'\n';
for(int i=1;i<=n;i++)
if(l[i])
fout<<i<<' '<<l[i]<<'\n';
return 0;
}