Pagini recente » Cod sursa (job #1535398) | Cod sursa (job #267097) | Cod sursa (job #778517) | Cod sursa (job #2801440) | Cod sursa (job #301397)
Cod sursa(job #301397)
// cuplaj.cpp : Defines the entry point for the console application.
//
#include <cstdio>
#include <bitset>
#include <vector>
using namespace std;
#define maxN 10010
#define pb push_back
bitset <maxN> viz;
vector <int> G[maxN];
int cuplaj[maxN], cuplaj2[maxN], N, M, E, Sol;
bool df (int nod) {
if (viz[nod]) return false;
viz[nod] = 1;
int vecin;
for (int i = 0; i < G[nod].size(); ++ i) {
vecin = G[nod][i];
if (! cuplaj[vecin]) {
cuplaj[vecin] = nod;
cuplaj2[nod] = 1;
return true;
} else
if (cuplaj[vecin] != nod && df (cuplaj[vecin])) {
cuplaj[vecin] = nod;
cuplaj2[nod] = 1;
return true;
}
}
return false;
}
void print () {
int i;
printf("%d\n", Sol);
for (i = 1; i <= N; ++ i)
if (cuplaj[i])
printf("%d %d\n", cuplaj[i], i);
}
int main( )
{
int a, b, i, ok = 1;
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d%d%d", &N, &M, &E);
for ( ; E -- ; ) {
scanf("%d%d", &a, &b);
G[a].pb(b);
}
ok = 1;
while (ok) {
ok = 0;
viz.reset();
for (i = 1; i <= N; ++ i)
if (! cuplaj2[i] && df(i)) {
Sol ++;
ok = 1;
}
}
print ();
return 0;
}