Pagini recente » Cod sursa (job #1886206) | Cod sursa (job #2733585) | Cod sursa (job #2295507) | Cod sursa (job #317542) | Cod sursa (job #2394902)
#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];
int ok;
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;
ok = 1;
while (ok)
{
ok = 0;
memset(u, 0, sizeof(u));
for (i=1;i<=n;i++)
if(!l[i])
ok |= pairup(i);
}
for (i=1;i<=n;i++)
if (l[i] > 0)
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;
}