Pagini recente » Cod sursa (job #708390) | Cod sursa (job #1092046) | Cod sursa (job #827174) | Cod sursa (job #154054) | Cod sursa (job #2961053)
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <fstream>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int N,M,E;
vector<int> G[100001];
int viz[100001];
int match[100001];
bool pairup(int nod)
{
viz[nod]=1;
for(int i=0;i<G[nod].size();i++)
{ int vecin=G[nod][i];
if(!match[vecin] || (!viz[match[vecin]] && pairup(match[vecin])))
{ match[vecin]=nod;
match[nod]=vecin;
return true;
}
}
return false;
}
int main() {
int x,y,z;
fin>>N>>M>>E;
for(int i=1;i<=E;i++)
{ fin>>x>>y;
y += N;
G[x].push_back(y);
G[y].push_back(x);
}
int nr=0;
for(int i=1;i<=N;i++)
{ if(!match[i])
{ for(int j=1;j<=N;j++)
viz[j]=0;
if(pairup(i))
nr++;
}
}
fout<<nr<<endl;
for(int i=1;i<=N;i++)
if(match[i])
fout<<i<<" "<<match[i]-N<<endl;
return 0;
}