Pagini recente » Cod sursa (job #945452) | Cod sursa (job #2695423)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
const int N = 1e4 + 5;
int n, m, e, Left[N], Right[N], nr_pairs_matched;
vector<int> a[N];
bool viz[N];
bool dfs(int node)
{
if (viz[node])
{
return false;
}
viz[node] = 1;
for (int nei : a[node])
{
if (!Right[nei] || dfs(Right[nei]))
{
Left[node] = nei;
Right[nei] = node;
return true;
}
}
return false;
}
int main()
{
in >> n >> m >> e;
for(int i = 1 ; i <= e ; i++)
{
int x, y;
in >> x >> y;
a[x].push_back(y);
}
bool find_pair = true;
while (find_pair)
{
find_pair = false;
for (int i = 1; i <= n; ++i)
{
viz[i] = 0;
}
for (int i = 1; i <= n; ++i)
{
if (!Left[i] && dfs(i))
{
find_pair = true;
nr_pairs_matched++;
}
}
}
out << nr_pairs_matched << '\n';
for (int i = 1; i <= n; ++i)
{
if (Left[i])
{
out << i << ' ' << Left[i] << '\n';
}
}
return 0;
}