Pagini recente » Cod sursa (job #2279712) | Cod sursa (job #161237) | Cod sursa (job #2223153) | Cod sursa (job #2464929) | Cod sursa (job #1916237)
#include <fstream>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
struct el{int nod; int urm;};
el a[200001];
int l[100001],n,k,i,j,v1[100001],v2[100001],x,y,m,nr;
bool viz[100001];
void ad(int x, int y)
{
k++;
a[k].nod=y;
a[k].urm=l[x];
l[x]=k;
}
void curat()
{
int i;
for(i=1;i<=n;i++)
viz[i]=0;
}
void parc1(int nd)
{
int i=1,ok;
viz[nd]=1;
v1[nd]=1;
while(i)
{
ok=0;
int poz=l[v1[i]];
while(poz)
{
if(viz[a[poz].nod]==0)
{
ok=1;
viz[a[poz].nod]=1;
i++;
v1[i]=a[poz].nod;
poz=0;
}
poz=a[poz].urm;
}
if(ok==0)
{
x++;
v2[x]=v1[i];
i--;
}
}
}
void parc2(int nd)
{
viz[nd]=1;
v1[1]=nd;
int i=1,ok;
while(i)
{
ok=0;
int poz=l[v1[i]];
while(poz)
{
if(viz[a[poz].nod]==0)
{
ok=1;
viz[a[poz].nod]=1;
i++;
v1[i]=a[poz].nod;
poz=0;
}
poz=a[poz].urm;
}
if(ok==0)
i--;
}
}
void parc3(int nd)
{
viz[nd]=1;
v1[1]=nd;
int i=1,ok;
while(i)
{
ok=0;
int poz=l[v1[i]];
while(poz)
{
if(viz[a[poz].nod]==0)
{
ok=1;
viz[a[poz].nod]=1;
i++;
v1[i]=a[poz].nod;
poz=0;
}
poz=a[poz].urm;
}
if(ok==0)
{
g<<v1[i]<<" "; i--;}
}
g<<'\n';
}
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
ad(x,y);
}
x=0;
parc1(1);
//f.close();
ifstream ff("ctc.in");
ff>>n>>m;
k=0;
for(i=1;i<=n;i++)
l[i]=0;
for(i=1;i<=m;i++)
{
ff>>x>>y;
ad(y,x);
}
curat();
for(i=n;i>=1;i--)
if(viz[v2[i]]==0)
{ nr++;
parc2(v2[i]);}
g<<nr<<'\n';
curat();
for(i=m;i>=1;i--)
if(viz[v2[i]]==0)
{ nr++;
parc3(v2[i]);}
return 0;
}