Pagini recente » Cod sursa (job #1373253) | Cod sursa (job #306512) | Cod sursa (job #472940) | Cod sursa (job #1517544) | Cod sursa (job #1618802)
#include <cstdio>
#include <iostream>
#include <bitset>
#include <vector>
#define nmax 10000
using namespace std;
int a[nmax],b[nmax];
int l,r,m1,nrcon;
bitset<nmax> u;
vector<int> m[nmax];
int con(int nod)
{
int i;
if(u[nod]) return 0;
u[nod]=1;
for(i=0;i<m[nod].size();i++)
if(!b[m[nod][i]])
{
if(!a[nod]) nrcon++;
b[m[nod][i]]=nod;
a[nod]=m[nod][i];
return 1;
}
for(i=0;i<m[nod].size();i++)
if(con(b[m[nod][i]]))
{
if(!a[nod]) nrcon++;
b[m[nod][i]]=nod;
a[nod]=m[nod][i];
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
//freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&l,&r,&m1);
int n1,n2,i,change;
for(;m1;m1--)
{
scanf("%d%d",&n1,&n2);
m[n1].push_back(n2);
}
change=1;
while(change)
{
change=0;
for(i=1;i<=l;i++) u[i]=0;
for(i=1;i<=l;i++) if(!b[i]) change|=con(i);
}
printf("%d\n",nrcon);
for(i=1;i<=l;i++)
if(a[i]) printf("%d %d\n",i,a[i]);
fclose(stdin);
fclose(stdout);
return 0;
}