Pagini recente » Cod sursa (job #396396) | Cod sursa (job #1512851) | Cod sursa (job #944135) | Cod sursa (job #575232) | Cod sursa (job #2822398)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector<int> la[100005];
int st[100005],dr[100005],viz[100005];
int n1,n2,m,x,y;
int cupl(int nod)
{
if (viz[nod])
return 0;
viz[nod] = 1;
for (auto& vecin: la[nod])
{
if (dr[vecin] == 0)
{
dr[vecin] = nod;
st[nod] = vecin;
return 1;
}
}
for (auto& vecin: la[nod])
{
if (cupl(dr[vecin]))
{
dr[vecin] = nod;
st[nod] = vecin;
return 1;
}
}
return 0;
}
int main()
{
in >> n1 >> n2 >> m;
for (int i = 0; i < m; i++)
{
in >> x >> y;
la[x].push_back(y);
}
int opt = 1;
int cuplaj = 0;
while (opt)
{
opt = 0;
for (int i = 0; i < 100005; i ++)
viz[i] = 0;
for (int i = 1; i <= n1; i++)
{
if (st[i] == 0 && cupl(i))
{
opt = 1;
cuplaj++;
}
}
}
out << cuplaj << '\n';
for (int i = 1; i <= n1; i++)
{
if (st[i])
out << i << ' ' << st[i] << '\n';
}
return 0;
}