Pagini recente » Cod sursa (job #1243030) | Istoria paginii utilizator/colossal_fuckup | Cod sursa (job #1844400) | Cod sursa (job #440321) | Cod sursa (job #2260542)
#include <bits/stdc++.h>
#define MAXN 10005
using namespace std;
ifstream in ("cuplaj.in");
ofstream out ("cuplaj.out");
int l[MAXN], u[MAXN], r[MAXN], cuplaj, n, m, mm, x, y;
vector <int> g[MAXN];
int pairup(int x)
{
if (u[x])
return 0;
u[x]=1;
for (int i=0; i<g[x].size(); i++)
if (r[g[x][i]]==0)
{
l[x]=g[x][i];
r[g[x][i]]=x;
return 1;
}
for (int i=0; i<g[x].size(); i++)
if (pairup(r[g[x][i]]))
{
l[x]=g[x][i];
r[g[x][i]]=x;
return 1;
}
return 0;
}
int main()
{
in >> n >> m >> mm;
for (int i=1; i<=mm; i++)
{
in >> x >> y;
g[x].push_back(y);
}
/*for (int i=1; i<=n; i++)
if (l[i]==0)
{
if (pairup(i)==0)
{
memset(u,0,sizeof(u));
cuplaj+=pairup(i);
}
else
cuplaj++;
}*/
for (int change=1; change;)
{
change=0;
memset(u,0,sizeof(u));
for (int i=1; i<=n; i++)
if (l[i]==0)
change|=pairup(i);
}
for (int i=1; i<=n; i++)
cuplaj+=(l[i]>0);
out << cuplaj << '\n';
for (int i=1; i<=n; i++)
if (l[i]>0)
out << i << " " << l[i] << '\n';
return 0;
}