Pagini recente » Cod sursa (job #365436) | Cod sursa (job #785725) | Cod sursa (job #1243449) | Cod sursa (job #582495) | Cod sursa (job #1922882)
#include <iostream>
#include <cstdio>
#include <vector>
#include <bitset>
#define NMAX 10007
using namespace std;
int N, M, E, nr;
int L[NMAX], R[NMAX];
vector<int> G[NMAX];
bitset<NMAX> V;
void clearV()
{
for(int i = 0; i <= N; i++)
V[i] = 0;
}
int cuplaj(int nod)
{
if(V[nod]) return 0;
V[nod] = 1;
for(int i = 0; i < G[nod].size(); ++i)
{
int nnod = G[nod][i];
if(R[nnod] && !cuplaj(R[nnod])) continue;
L[nod ] = nnod;
R[nnod] = nod ;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in" , "r", stdin );
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &N, &M, &E);
for(int i = 0; i < E; i++)
{
int x, y;
scanf("%d %d", &x, &y);
G[x].push_back(y);
}
int ok = 1;
while(ok)
{
ok = 0;
clearV();
for(int i = 1; i <= N; i++)
if(!L[i] && cuplaj(i))
{
ok = 1;
nr++;
}
}
printf("%d\n", nr);
for(int i = 1; i <= N; i++)
if(L[i])
printf("%d %d\n", i, L[i]);
return 0;
}