Pagini recente » Cod sursa (job #1543674) | Cod sursa (job #1715224) | Cod sursa (job #621083) | Cod sursa (job #2088733) | Cod sursa (job #2355696)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("cuplaj.in");
ofstream fo("cuplaj.out");
const int NMAX = 1e4 + 5;
vector <int> G[NMAX];
int n, m, e;
int v[NMAX], inv[NMAX];
bool viz[NMAX];
bool pun(int nod)
{
for (auto vec: G[nod])
{
if (viz[vec]) /// blocat
continue;
if (!inv[vec]) /// nu e atribuit
{
v[nod] = vec;
inv[vec] = nod;
viz[vec] = 1;
return 1;
}
else /// e atribuit
{
int x = inv[vec];
//viz[vec] = 1;
v[nod] = vec;
inv[vec] = nod;
viz[vec] = 1; /// blocam
if (pun(x)) /// a mers
{
return 1;
}
else /// n-a mers
{
v[x] = vec;
inv[vec] = x;
v[nod] = 0;
}
//viz[vec] = 0;
}
}
return 0;
}
int main()
{
fi >> n >> m >> e;
for (int i = 1; i <= e; i++)
{
int u, v;
fi >> u >> v;
G[u].push_back(v);
}
bool gt;
do
{
gt = 1;
for (int i = 1; i <= n; i++)
if (!v[i])
{
memset(viz, 0, sizeof(viz));
if (pun(i))
gt = 0;
}
} while (!gt);
int cnt = 0;
for (int i = 1; i <= n; i++)
if (v[i])
cnt++;
fo << cnt << "\n";
for (int i = 1; i <= n; i++)
if (v[i])
fo << i << " " << v[i] << "\n";
return 0;
}