Pagini recente » Cod sursa (job #302582) | Cod sursa (job #3630) | Cod sursa (job #244536) | Cod sursa (job #713652) | Cod sursa (job #858331)
Cod sursa(job #858331)
#include <cstdio>
#include <vector>
#define pb push_back
using namespace std;
vector <int> v[10009];
int st[10009],dr[10009],da[10009];
int cuplare(int nod,int ord)
{
int ok=0;
if (da[nod]==ord) return 0;
da[nod]=ord;
for (vector<int>::iterator it=v[nod].begin();it!=v[nod].end();++it)
if (!dr[*it])
{st[nod]=*it,dr[*it]=nod,ok=1; break;}
if (!ok)
for (vector<int>::iterator it=v[nod].begin();it!=v[nod].end();++it)
if (cuplare(dr[*it],ord))
{st[nod]=*it,dr[*it]=nod,ok=1; break;}
return ok;
}
int main()
{
int n,m,e,i,x,y,rez=0,k=1;
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n,&m,&e);
for (i=1;i<=e;++i)
{
scanf("%d %d",&x,&y);
v[x].pb(y);
}
for (i=1;i<=n;++i)
if (cuplare(i,k))
++rez; else
++k,rez+=cuplare(i,k);
printf("%d\n",rez);
for (i=1;i<=n;++i)
if (st[i])
printf("%d %d\n",i,st[i]);
return 0;
}