Pagini recente » Cod sursa (job #185313) | Cod sursa (job #2298574) | Cod sursa (job #2485155) | Cod sursa (job #902003) | Cod sursa (job #2394898)
#include <bits/stdc++.h>
using namespace std;
#define nmax 10005
int n, m, e, x, y, i;
int u[nmax], l[nmax], r[nmax];
vector <int> G[nmax];
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int pairup(int nod)
{
if (u[nod])
return 0;
u[nod] = 1;
for (auto &it : G[nod])
if (!r[it])
{
l[nod] = it;
r[it] = nod;
return 1;
}
for (auto &it : G[nod])
if (pairup(r[it]))
{
l[nod] = it;
r[it] = nod;
return 1;
}
return 0;
}
int main()
{
f>>n>>m>>e;
for (i=1;i<=e;i++)
{
f>>x>>y;
G[x].push_back(y);
}
int cuplaj = 0;
for (i=1;i<=n;i++)
{
if (!l[i])
{
if (!pairup(i))
{
memset(u, 0, sizeof(u));
cuplaj += pairup(i);
}
else
cuplaj++;
}
}
g<<cuplaj<<"\n";
for (i=1;i<=n;i++)
if (l[i] > 0)
g<<i<<" "<<l[i]<<"\n";
f.close();
g.close();
return 0;
}