Pagini recente » Cod sursa (job #2112049) | Cod sursa (job #496494) | Cod sursa (job #1535951) | Cod sursa (job #1026192) | Cod sursa (job #2224409)
#include <fstream>
#include <vector>
#include <bitset>
#define DIM 10005
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout ("cuplaj.out");
int n,m,e,i,sol,ok,x,y;
int l[DIM],r[DIM];
bitset <DIM> f;
vector <int> L[DIM*10];
/// left[i] - vecinul din drepta din cuplaj al nodului i din stanga\\\
sau 0 daca i nu e cuplat
/// right[i] - vecinul din stanga din cuplaj al nodului i din dreapta\\\
sau 0 daca i nu e cuplat
int cupleaza (int nod){
if (f[nod] == 1)
return 0;
f[nod] = 1;
for (int i=0;i<L[nod].size();i++){
int vecin = L[nod][i];
if (r[vecin] == 0){
l[nod] = vecin;
r[vecin] = nod;
sol++;
return 1;
}
}
for (int i=0;i<L[nod].size();i++){
int vecin = L[nod][i];
if (cupleaza(vecin)){
l[nod] = vecin;
r[vecin] = nod;
return 1;
}
}
return 0;
}
int main (){
fin>>n>>m>>e;
for (i=1;i<=e;i++){
fin>>x>>y;
L[x].push_back (y);
}
do{
f.reset();
ok = 0;
for (i=1;i<=n;i++){
if (l[i] == 0 && cupleaza(i))
ok = 1;
}
}while (ok);
fout<<sol<<"\n";
for (i=1;i<=n;i++)
if (l[i] != 0)
fout<<i<<" "<<l[i]<<"\n";
return 0;
}