Pagini recente » Cod sursa (job #2077568) | Rating Cristi Moldovan (cristimc8) | Cod sursa (job #1137743) | Cod sursa (job #1534047) | Cod sursa (job #393721)
Cod sursa(job #393721)
#include<stdio.h>
#include<vector>
#include <algorithm>
#define Nmax 10010
using namespace std;
vector <int> l[Nmax];
int viz[Nmax],leg[Nmax],p[Nmax],n,m,nr_edg,cuplaj;
int pairup(const int k)
{
if (viz[k])
return 0;
viz[k]=1;
for(vector<int>::iterator i=l[k].begin(); i!= l[k].end() ; ++i)
if (!p[ *i ])
{
leg[k]= *i;
p[ *i ]=k;
return 1;
}
for(vector<int>::iterator i=l[k].begin(); i!= l[k].end() ;++i)
if (p[*i]!=k && pairup(p[ *i ]))
{
leg[k]= *i;
p[ *i ]=k;
return 1;
}
return 0;
}
void solve()
{
int ok=1;
while (ok)
{
ok=0;
memset(viz,0,Nmax);
for(int i=1;i<=n;++i)
if (!leg[i])
ok |=pairup(i);
}
for(int i=1;i<=n;++i)
if (leg[i]>0)
++cuplaj;
printf("%d\n",cuplaj);
for(int i=1;i<=n;++i)
if (leg[i])
printf("%d %d\n",i,leg[i]);
}
void cit()
{
int x,y;
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&n,&m,&nr_edg);
for(int i=1;i<=nr_edg;++i)
{
scanf("%d%d",&x,&y);
l[x].push_back(y);
}
}
int main()
{
cit();
solve();
return 0;
}