Pagini recente » Cod sursa (job #1059478) | Cod sursa (job #3168418) | Cod sursa (job #832283) | Cod sursa (job #1747934) | Cod sursa (job #2555559)
#include <bits/stdc++.h>
using namespace std;
ifstream inf("cuplaj.in");
ofstream outf("cuplaj.out");
const int N=10010;
int n, m, e, l[N], r[N], u[N];
vector<int> adj[N];
int pairup(int n)
{
if(u[n])
return 0;
u[n]=1;
for(auto it:adj[n])
{
if(!r[it])
{
l[n]=it;
r[it]=n;
return 1;
}
}
for(auto it:adj[n])
{
if(pairup(r[it]))
{
l[n]=it;
r[it]=n;
return 1;
}
}
return 0;
}
int main()
{
inf>>n>>m>>e;
for(int i=1; i<=e; i++)
{
int x, y;
inf>>x>>y;
adj[x].push_back(y);
}
for(int change=1; change; change)
{
change=0;
memset(u, 0, sizeof(u));
for(int i=1; i<=n; i++)
if(!l[i])
change|=pairup(i);
}
int cuplaj=0;
for(int i=1; i<=n; i++)
cuplaj+=(l[i]>0);
outf<<cuplaj<<'\n';
for(int i=1; i<=n; i++)
if(l[i]>0)
outf<<i<<' '<<l[i]<<'\n';
return 0;
}