Pagini recente » Cod sursa (job #2381014) | Cod sursa (job #1156305) | Cod sursa (job #149808) | Cod sursa (job #2881740) | Cod sursa (job #1655684)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
const int Nmax = 10005;
vector <int> G[Nmax];
int l, r, m, L[Nmax], R[Nmax], Use[Nmax], nr;
int pairup(int nod)
{
if(Use[nod]) return 0;
Use[nod] = 1;
for(int i = 0; i < (int)G[nod].size(); i++)
{
int vecin = G[nod][i];
if(!R[vecin])
{
R[vecin] = nod;
L[nod] = vecin;
return 1;
}
}
for(int i = 0; i < (int)G[nod].size(); i++)
{
int vecin = G[nod][i];
if(pairup(vecin))
{
R[vecin] = nod;
L[nod] = vecin;
return 1;
}
}
return 0;
}
int main()
{
int ok = 0;
f>>l>>r>>m;
while(m--)
{
int x,y;
f>>x>>y;
G[x].push_back(y);
}
do
{
ok = 0;
for(int i = 1; i <= l; i++)
{
if(L[i] == 0)
{
if(pairup(i))
{
ok = 1;
}
}
}
memset(Use, 0, sizeof(Use));
}while(ok == 1);
for(int i = 1; i <= l; i++)
{
if(L[i]>0) nr++;
}
g<<nr<<'\n';
for(int i = 1; i <= l; i++)
{
if(L[i] > 0) g<<L[i]<<' '<<i<<'\n';
}
return 0;
}