Pagini recente » Cod sursa (job #1102603) | Cod sursa (job #3249104) | Cod sursa (job #1411994) | Cod sursa (job #1830822) | Cod sursa (job #1014052)
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;
struct abc
{
short int a;
short int b;
short int c;
};
vector<short int>v[10000];
short int sol[10000];
int i,j,n,m,x,y,p,nr;
char cup[10000],cup1[10000];
abc coada[10000];
int cuplaj(short int a)
{
int i;
nr=0;
for(i=1;i<=max(n,m);i++)
{
cup[i]=0;
cup1[i]=0;
}
cup[a]=1;
for(i=0;i<v[a].size();i++)
{
x=v[a][i];
if(cup1[x]==0)
{
cup1[x]=1;
coada[++nr].a=x;
coada[nr].b=a;
coada[nr].c=0;
}
if(sol[x]==0) return 1;
}
for(i=1;i<=nr;i++)
{
a=sol[coada[i].a];
if(cup[a]==0)
{
cup[a]=1;
for(j=0;j<v[a].size();j++)
{
x=v[a][j];
if(cup1[x]==0)
{
cup1[x]=1;
coada[++nr].a=x;
coada[nr].b=a;
coada[nr].c=i;
}
if(sol[x]==0) return 1;
}
}
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&n,&m,&p);
for(i=1;i<=p;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
}
for(i=1;i<=n;i++)
{
if(cuplaj(i))
{
sol[coada[nr].a]=coada[nr].b;
for(int j=coada[nr].c;j>0;j=coada[j].c)
{
sol[coada[j].a]=coada[j].b;
}
}
}
nr=0;
for(i=1;i<=m;i++) if(sol[i])nr++;
printf("%d\n",nr);
for(i=1;i<=m;i++)
if(sol[i]) printf("%d %d\n",sol[i],i);
return 0;
}