Pagini recente » Cod sursa (job #2466673) | Cod sursa (job #1360013) | Cod sursa (job #542786) | Cod sursa (job #2745966) | Cod sursa (job #1429627)
#include <iostream>
#include<fstream>
#include <vector>
#define Nmax 10001
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int cuplaj,n,m,e;
vector <int> G[Nmax];
int R[Nmax],L[Nmax],use[Nmax];
bool Pair_up(int nod)
{
if(use[nod]==1) return 0;
use[nod]=1;
for(unsigned int i=0;i<G[nod].size();i++)
{
int vecin=G[nod][i];
if(R[vecin]==0)
{
R[vecin]=nod;
L[nod]=vecin;
return 1;
}
}
for(unsigned int i=0;i<G[nod].size();i++)
{
int vecin=G[nod][i];
if(Pair_up(R[vecin])==1)
{
R[vecin]=nod;
L[nod]=vecin;
return 1;
}
}
return 0;
}
void Solve()
{
for(int i=1;i<=n;i++)
if(!L[i])
{
for(int j=1;j<=n;j++)use[j]=0;
cuplaj+=Pair_up(i);
}
}
void Afisare()
{
fout<<cuplaj<<"\n";
for(int i=1;i<=n;i++)
if(L[i])
fout<<i<<" "<<L[i]<<'\n';
}
int main()
{
fin>>n>>m>>e;
int i,x,y;
for(i=1;i<=e;i++)
{
fin>>x>>y;
G[x].push_back(y);
}
Solve();
Afisare();
return 0;
}