Pagini recente » Cod sursa (job #3122741) | Monitorul de evaluare | Cod sursa (job #1764967) | Cod sursa (job #1178355) | Cod sursa (job #529568)
Cod sursa(job #529568)
#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);
}
bool ok = 1;
while (ok) {
ok = 0;
viz.reset ();
for (i = 1; i <= n; i++)
if (!l[i])
if (cupleaza (i))
++sol, ok = 1;
}
printf ("%d\n", sol);
for (i = 1; i <= n; i++)
if (l[i])
printf ("%d %d\n", i, l[i]);
return 0;
}