Pagini recente » Cod sursa (job #1217489) | Cod sursa (job #2429094) | Cod sursa (job #3180205) | Cod sursa (job #2708800) | Cod sursa (job #529551)
Cod sursa(job #529551)
#include <cstdio>
#include <vector>
#include <bitset>
#define maxN 10050
using namespace std;
vector <int> g[maxN];
bitset <maxN> viz;
int n, m, l[maxN], r[maxN], sol;
inline bool cupleaza (int node)
{
if (viz[node]) return 0;
viz[node] = 1;
for (vector <int> :: iterator it = g[node].begin (); it != g[node].end (); it++)
if (!r[*it] || cupleaza (r[*it])) {
r[*it] = node;
l[node] = *it;
return 1;
}
return 0;
}
int main ()
{
freopen ("cuplaj.in", "r", stdin);
freopen ("cuplaj.out", "w", stdout);
int edges, i, x, y;
for (scanf ("%d %d %d\n", &n, &m, &edges); edges--; ) {
scanf ("%d %d\n", &x, &y);
g[x].push_back (y);
}
for (i = 1; i <= n; i++)
if (!l[i]) {
viz.reset ();
if (cupleaza (i))
++sol;
}
printf ("%d\n", sol);
for (i = 1; i <= n; i++)
if (l[i])
printf ("%d %d\n", i, l[i]);
return 0;
}