Pagini recente » Cod sursa (job #217533) | Cod sursa (job #992792) | Cod sursa (job #1888606) | Cod sursa (job #1625557) | Cod sursa (job #2482437)
//#include <iostream>
#include <fstream>
#include <vector>
#include<cstring>
using namespace std;
vector<int> v[10005];
int f[10005],dre[10005];
bool func(int i){
int ok=0;
for(auto it:v[i])
if(f[it]==0){
f[it]=1;
if(dre[it]==0){
dre[it]=i;
return true;
}
if(func(dre[it])){
dre[it]=i;
return true;
}
}
return false;
}
int main()
{
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
int n,m,e,st,dr,sum=0;
cin>>n>>m>>e;
for(int i=1;i<=e;i++){
cin>>st>>dr;
v[st].push_back(dr);
}
for(int i=1;i<=n;i++){
//cout<<i<<"\n";
memset(f,0,sizeof(f));
sum+=func(i);
}
cout<<sum<<"\n";
for(int i=1;i<=m;i++){
if(dre[i]!=0){
cout<<dre[i]<<" "<<i<<"\n";
}
}
return 0;
}
/*
int solve(int nod)
{
if(viz[nod])
return 0;
viz[nod]=1;
for(auto i:v[nod])
if(!cup[1][i]||solve(cup[1][i]))
{
cup[0][nod]=i;
cup[1][i]=nod;
return 1;
}
return 0;
}
*/