Pagini recente » Cod sursa (job #2926369) | Cod sursa (job #924655) | Cod sursa (job #2873909) | Cod sursa (job #575660) | Cod sursa (job #2968712)
#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])
{
r[v] = u;
l[u] = v;
return true;
}
for(int v : g[u])
if(dfs(r[v]))
{
r[v] = u;
l[u] = v;
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);
}
while(true)
{
for(int i = 1; i <= n; i++)
used[i] = false;
bool ok = false;
for(int i = 1; i <= n; i++)
if(!l[i])
ok = (ok || dfs(i));
if(!ok)
break;
}
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;
}