Pagini recente » Cod sursa (job #130452) | Cod sursa (job #2759073) | Cod sursa (job #2551819) | Cod sursa (job #2532155) | Cod sursa (job #2749915)
#include <fstream>
#include <vector>
#include <algorithm>
#include <map>
#include <queue>
#include <cstring>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
int a, b, m, uz[10005], l[10005], r[10005];
vector<int> L[10005];
bool cup(int node)
{
if (uz[node])
return false;
uz[node] = true;
for (int i : L[node])
{
if (r[i])
continue;
l[node] = i;
r[i] = node;
return true;
}
for (int i : L[node])
{
if (cup(r[i]))
{
l[node] = i;
r[i] = node;
return true;
}
}
return false;
}
int main()
{
cin >> a >> b >> m;
for (int i=1;i<=m;i++)
{
int x, y;
cin >> x >> y;
L[x].push_back(a+y);
L[a+y].push_back(x);
}
bool ok = true;
while (ok)
{
ok = false;
memset(uz, 0, sizeof(uz));
for (int i = 1; i <= a; i++)
if (!uz[i] && !l[i])
if (cup(i))
ok = true;
}
int nrsol = 0;
for (int i = 1; i <= a; i++)
if (l[i])
nrsol++;
cout << nrsol << '\n';
for (int i = 1; i <= a; i++)
if (l[i])
cout << i << ' ' << l[i] - a << '\n';
return 0;
}