Pagini recente » Cod sursa (job #1534909) | Cod sursa (job #2557320) | Cod sursa (job #376486) | Cod sursa (job #544285) | Cod sursa (job #2870865)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("cuplaj.in");
ofstream g ("cuplaj.out");
#define maxn 10005
#define fori(i,a) for(vector<int>::iterator i=(a).begin();i!=(a).end();++i)
vector<int>a[maxn];
int l[maxn],r[maxn],u[maxn];
int pairup(const int n)
{
if(u[n])
return 0;
u[n]=1;
fori(i,a[n])
if(!r[*i])
{
l[n]=*i;
r[*i]=n;
return 1;
}
fori(i,a[n])
if(pairup(r[*i]))
{
l[n]=*i;
r[*i]=n;
return 1;
}
return 0;
}
int main()
{
int n,m,e;
f>>n>>m>>e;
for(;e;e--)
{
int x,y;
f>>x>>y;
a[x].push_back(y);
}
for(int change=1;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);
g<<cuplaj<<'\n';
for(int i=1;i<=n;i++)
if(l[i]>0)
g<<i<<" "<<l[i]<<'\n';
return 0;
}