Pagini recente » Cod sursa (job #2778275) | Cod sursa (job #2544048) | Cod sursa (job #3038852) | Cod sursa (job #3144446) | Cod sursa (job #2968704)
#include <stdio.h>
#include <vector>
#define NMAX (10'000)
#define MMAX (10'000)
std::vector<int> g[NMAX + 1];
int l[NMAX + 1], r[MMAX + 1];
bool used[NMAX + 1];
bool dfs(int u)
{
if(used[u])
return false;
used[u] = true;
for(int v : g[u])
if(!r[v])
{
l[u] = v;
r[v] = u;
return true;
}
for(int v : g[u])
if(dfs(r[v]))
{
l[u] = v;
r[v] = u;
return true;
}
return false;
}
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
int n, m, e;
scanf("%d %d %d", &n, &m, &e);
for(int i = 0; i < e; i++)
{
int u, v;
scanf("%d %d", &u, &v);
g[u].push_back(v);
}
bool found;
do
{
found = false;
for(int i = 1; i <= n; i++)
used[i] = false;
for(int i = 1; i <= n; i++)
if(!l[i])
found = (found || dfs(i));
} while (found);
int nr = 0;
for(int i = 1; i <= n; i++)
if(l[i])
nr++;
printf("%d\n", nr);
for(int i = 1; i <= n; i++)
if(l[i])
printf("%d %d\n", i, l[i]);
return 0;
}