Pagini recente » Cod sursa (job #690385) | Cod sursa (job #2144186) | Cod sursa (job #797426) | Cod sursa (job #2444795) | Cod sursa (job #2175216)
#include <fstream>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
ifstream ff("ctc.in");
struct el{int nod; int urm;};
el a[200001];
int l[100001],v[100001],lung[100001],noduri[100001];
bool viz[100001];
int n,m,x,y,k,kk;
void add(int x, int y)
{
k++;
a[k].nod=y;
a[k].urm=l[x];
l[x]=k;
}
void parc(int x)
{
viz[x]=1;
int poz=l[x];
while(poz)
{
if(viz[a[poz].nod]==0)
parc(a[poz].nod);
poz=a[poz].urm;
}
kk++;
v[kk]=x;
}
void caut2(int x, int nr)
{
viz[x]=1;
int poz=l[x];
while(poz)
{
if(viz[a[poz].nod]==0)
{
lung[nr]++;
caut2(a[poz].nod,nr);
}
poz=a[poz].urm;
}
kk++;
noduri[kk]=x;
}
int main()
{
int i;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
add(x,y);
}
for(i=1;i<=n;i++)
{
if(viz[i]==0)
parc(i);
}
for(i=1;i<=n;i++)
{viz[i]=0; l[i]=0;}
k=0;
ff>>x>>y;
for(i=1;i<=m;i++)
{
ff>>x>>y;
add(y,x);
}
int nr=0;
kk=0;
for(i=n;i>=1;i--)
{
if(viz[v[i]]==0)
{
nr++;
caut2(v[i],nr);
}
}
g<<nr<<'\n';
int nr2=0;
int j;
for(i=1;i<=nr;i++)
{
for(j=1;j<=lung[i]+1;j++)
{
nr2++;
g<<noduri[nr2]<<" ";
}
g<<'\n';
}
return 0;
}