Pagini recente » Cod sursa (job #1537443) | Cod sursa (job #3140155) | Cod sursa (job #810227) | Cod sursa (job #1405610) | Cod sursa (job #579565)
Cod sursa(job #579565)
#include <stdio.h>
#include <vector>
#include <string.h>
#define TR(C, i)\
for(typeof ( C.begin() ) i = C.begin(); i != C.end(); i++)
#define pb push_back
using namespace std;
int N, M, E;
const int nmax = 10010;
vector <int> G[nmax];
bool U[nmax];
int R[nmax], L[nmax];
void read()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &N, &M, &E);
int l, r;
while(E--)
{
scanf("%d %d", &l, &r);
G[l].pb( r );
}
}
int PairUp(int x)
{
if(U[x]) return 0;
U[x] = true;
TR(G[x], it)
if(!R[*it] || PairUp(R[*it]))
{
L[x] = *it;
R[*it] = x;
return 1;
}
return 0;
}
int cuplaj()
{
bool ok = true;
int i, cuplu = 0;
while( ok )
{
ok = false;
memset(U, false, sizeof(U));
for(i = 1; i <= N; i++)
if(!L[i])
if( PairUp(i) )
{
ok = true;
cuplu++;
}
}
return cuplu;
}
int main()
{
read();
printf("%d\n", cuplaj());
for(int i = 1; i <= N; i++)
if(L[i])
printf("%d %d\n", i, L[i]);
return 0;
}