Pagini recente » Cod sursa (job #1905193) | Cod sursa (job #2870562) | Cod sursa (job #1240399) | Cod sursa (job #3173754) | Cod sursa (job #2668254)
#include <fstream>
#define fisier "cuplaj"
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
const int N = 10001, M = N;
int R[N], L[M], s;
#include <vector>
std::vector<int> V[N];
#include <bitset>
std::bitset<N> E;
bool dfs(int);
bool cauta(int l, bool sat)
{
for (int r: V[l])
if (sat? dfs(L[r]): not L[r])
{
L[r] = l; R[l] = r;
if (not sat) s++;
return true;
}
return false;
}
bool dfs(int l)
{
if (E[l])
return false;
E[l] = true;
return cauta(l, false) or cauta(l, true);
}
int main()
{
int n, m, e;
in >> n >> m >> e;
while (e--)
{
int l, r;
in >> l >> r;
V[l].push_back(r);
}
bool cup = true;
do
{
E = cup = false;
for (int l = 1; l <= n; l++)
cup |= not R[l] and dfs(l);
}
while (cup);
out << s << '\n';
for (int l = 1; l <= n; l++)
if (R[l])
out << l << ' ' << R[l] << '\n';
}