Pagini recente » Cod sursa (job #3278148) | Cod sursa (job #111310) | Cod sursa (job #2710218) | Cod sursa (job #1876513) | Cod sursa (job #3325282)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
typedef long long ll;
typedef long double ld;
const int N = 1e4 + 5;
int n, m, e, cpl[2 * N], rasp;
bool viz[N];
vector<int> v[N];
bool pairUp(int nod)
{
if (viz[nod])
return false;
viz[nod] = true;
for (int i : v[nod])
if (!cpl[i])
{
cpl[i] = nod;
cpl[nod] = i;
return true;
}
for (int i : v[nod])
if (pairUp(cpl[i]))
{
cpl[i] = nod;
cpl[nod] = i;
return true;
}
return false;
}
int main()
{
fin >> n >> m >> e;
while (e--)
{
int a, b;
fin >> a >> b;
v[a].push_back(b + n);
}
bool gasit;
do
{
gasit = false;
for (int i = 1; i <= n; i++)
viz[i] = false;
for (int i = 1; i <= n; i++)
if (!cpl[i] && pairUp(i))
{
rasp++;
gasit = true;
}
} while (gasit);
fout << rasp << '\n';
for (int i = 1; i <= n; i++)
if (cpl[i])
fout << i << ' ' << cpl[i] << '\n';
return 0;
}