Pagini recente » Cod sursa (job #2675984) | Cod sursa (job #2484059) | Cod sursa (job #1958306) | Cod sursa (job #498528) | Cod sursa (job #2968706)
#include <fstream>
#include <vector>
#define NMAX (10'000)
#define MMAX (10'000)
std::ifstream cin("cuplaj.in");
std::ofstream cout("cuplaj.out");
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()
{
int n, m, e;
cin >> n >> m >> e;
for(int i = 0; i < e; i++)
{
int u, v;
cin >> 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++;
cout << nr << '\n';
for(int i = 1; i <= n; i++)
if(l[i])
cout << i << ' ' << l[i] << '\n';
return 0;
}