Pagini recente » Cod sursa (job #925841) | Cod sursa (job #1804406) | Cod sursa (job #158541) | Cod sursa (job #2761292) | Cod sursa (job #407495)
Cod sursa(job #407495)
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
#define Nmax 10005
vector <int> l[Nmax];
int N,M,p[Nmax],r[Nmax],v[Nmax];
int pairup(int k)
{
if (v[k])
return 0;
v[k]=1;
for(int i=0;i<(int)l[k].size();++i)
if (!r[ l[k][i] ])
{
p[k] = l[k][i];
r[l[k][i]]=k;
return 1;
}
for(int i=0;i<(int)l[k].size();++i)
if (r[l[k][i]]!=k && pairup(r[ l[k][i] ]))
{
p[k] = l[k][i];
r[l[k][i]]=k;
return 1;
}
return 0;
}
void solve()
{
for(int ok=1 ; ok ; )
{
ok=0;
memset(v,0,sizeof(v));
for(int i=1;i<=N;++i)
if (!p[i])
ok |= pairup(i);
}
int cnt=0;
for(int i=1;i<=N;++i)
if (p[i])
cnt++;
printf("%d\n",cnt);
for(int i=1;i<=N;++i)
if (p[i])
printf("%d %d\n",i,p[i]);
}
void cit();
int main()
{
cit();
solve();
return 0;
}
void cit()
{
int a,b,e;
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&N,&M,&e);
for(int i=1;i<=e;++i)
{
scanf("%d%d",&a,&b);
l[a].push_back(b);
}
}