Pagini recente » Cod sursa (job #1337347) | Cod sursa (job #2795784) | Cod sursa (job #405134) | Cod sursa (job #1674390) | Cod sursa (job #404447)
Cod sursa(job #404447)
#include<cstdio>
#include<bitset>
#include<vector>
using namespace std;
#define NMAX 10005
#define sh short int
#define pb push_back
sh N,M,x,y,dr[NMAX],st[NMAX];
int nr,E;
bitset<NMAX>viz;
vector<sh>a[NMAX];
bool df (sh n)
{
if (viz[n])
return 0;
viz[n]=1;
size_t g=a[n].size();
for (size_t i=0; i<g; ++i)
{
if (!dr[a[n][i]])
{
st[n]=a[n][i];
dr[a[n][i]]=n;
return 1;
}
else
if (df(a[n][i]))
{
st[n]=a[n][i];
dr[a[n][i]]=n;
return 1;
}
}
return 0;
}
void cuplaj()
{
sh i;
for (i=1; i<=N; ++i)
{
if (st[i])
continue;
if (!df(i))
{
viz.reset();
df(i);
}
}
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%hd%hd%d",&N,&M,&E);
int i;
for (i=1; i<=E; ++i)
{
scanf("%hd%hd",&x,&y);
a[x].pb(y);
}
cuplaj();
nr=0;
for (int i=1; i<=N; ++i)
nr+=(st[i]>0);
printf("%d\n",nr);
for (int i=1;i<=N; ++i)
{
if (st[i]>0)
printf("%hd %hd\n",i,st[i]);
}
return 0;
}