Pagini recente » Cod sursa (job #2216340) | Cod sursa (job #1851735) | Cod sursa (job #1200435) | Cod sursa (job #2743524) | Cod sursa (job #3338170)
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("cuplaj.in");
ofstream out ("cuplaj.out");
const int NMAX = 10010;
int n, m, q, l[NMAX], r[NMAX], viz[NMAX], cnt, best, i, a, b;
bool change;
vector<vector<int>> mat;
bool cuplaj(int node)
{
if (viz[node] == cnt)
return 0;
viz[node] = cnt;
for (auto ind : mat[node])
if (r[ind] == 0)
{
l[node] = ind;
r[ind] = node;
return 1;
}
for (auto ind : mat[node])
if (cuplaj(r[ind]) == 1)
{
l[node] = ind;
r[ind] = node;
return 1;
}
return 0;
}
int main()
{
in >> n >> m >> q;
mat.resize(n+5);
while(q)
{
--q;
in >> a >> b;
mat[a].push_back(b);
}
change=1;
while(change)
{
change=0;
cnt++;
for (i = 1; i <= n; i++)
if (l[i] == 0)
change |= cuplaj(i);
}
for (i = 1; i <= n; i++)
best += (l[i]!=0);
out << best << '\n';
for (i = 1; i <= n; i++)
if (l[i] != 0)
out << i << ' ' << l[i] << '\n';
return 0;
}