Pagini recente » Cod sursa (job #1753363) | Cod sursa (job #1742237) | Cod sursa (job #586563) | Cod sursa (job #1811486) | Cod sursa (job #2279899)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("cuplaj.in");
ofstream g ("cuplaj.out");
vector <int> G[10005];
int n, m, k, x, y, nr;
int l[10005];
int r[10005];
bool done, marked[10005];
bool cupleaza (int node)
{
marked[node] = 1;
for (auto it : G[node])
{
if (!r[it])
{
l[node] = it;
r[it] = node;
return 1;
}
}
for (auto it : G[node])
{
if (!marked[r[it]] && cupleaza(r[it]))
{
l[node] = it;
r[it] = node;
return 1;
}
}
return 0;
}
int main()
{
f >> n >> m >> k;
for (int i = 1; i <= k; i++)
{
f >> x >> y;
G[x].push_back(y);
}
done = 1;
while (done)
{
done = 0;
for (int i = 1; i <= n; i++) marked[i] = 0;
for (int i = 1; i <= n; i++)
{
if (!l[i] && !marked[i])
{
done |= cupleaza(i);
}
}
}
for (int i = 1; i <= n; i++)
if (l[i] != 0) nr++;
g << nr << '\n';
for (int i = 1; i <= n; i++)
{
if (l[i] != 0) g << i << " " << l[i] << '\n';
}
return 0;
}