Pagini recente » Cod sursa (job #2385631) | Cod sursa (job #2404640) | Cod sursa (job #3146372) | Cod sursa (job #2921035) | Cod sursa (job #2722580)
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int NMAX = 1e4 + 1;
vector <int> g[NMAX];
vector <int> l;
vector <int> r;
bitset <NMAX> used;
bool pairUp(int node)
{
if (used[node])
return 0;
used[node] = 1;
for (auto i : g[node])
if (!l[i])
{
l[i] = node;
r[node] = i;
return 1;
}
for (auto i : g[node])
if (pairUp(l[i]))
{
l[i] = node;
r[node] = i;
return 1;
}
return 0;
}
int x, y, n, m, e;
int main()
{
fin >> n >> m >> e;
for (int i = 1; i <= e; ++i)
{
fin >> x >> y;
g[x].push_back(y);
}
r.resize(n + 1);
l.resize(m + 1);
int cnt = 0;
bool ok = true;
while (ok)
{
ok = false;
used.reset();
for (int i = 1; i <= n; ++i)
if (!r[i] && pairUp(i))
{
ok = true;
++cnt;
}
}
fout << cnt << '\n';
for (int i = 1; i <= n; ++i)
if (r[i])
fout << i << " " << r[i] << '\n';
return 0;
}