Pagini recente » Cod sursa (job #1293833) | Cod sursa (job #394493) | Cod sursa (job #1719562) | Cod sursa (job #1523532) | Cod sursa (job #588429)
Cod sursa(job #588429)
#include<fstream>
using namespace std;
ofstream g("ctc.out");
int i,j,n,*a[100001],v[100001],x,y,m,t=0,p[100001],*a2[100001],nr=0,*b[100000];
void dfs(int x)
{
int i;
v[x]=1;
for(i=1;i<=a[x][0];i++)
if(!v[a[x][i]])
dfs(a[x][i]);
p[++t]=x;
}
void dfs1(int x)
{
int i;
v[x]=0;
b[nr][0]++;
b[nr]=(int *)realloc(b[nr],(b[nr][0]+1)*sizeof(int));
b[nr][b[nr][0]]=x;
for(i=1;i<=a2[x][0];i++)
if(v[a2[x][i]])
dfs1(a2[x][i]);
}
int main()
{
ifstream f("ctc.in");
f>>n>>m;
for(i=1;i<=n;i++)
{
a[i]=(int *)realloc(a[i],sizeof(int));
a[i][0]=0;
a2[i]=(int *)realloc(a2[i],sizeof(int));
a2[i][0]=0;
b[i]=(int *)realloc(b[i],sizeof(int));
b[i][0]=0;
}
for(i=0;i<m;i++)
{
f>>x>>y;
a[x][0]++;
a[x]=(int *)realloc(a[x],(a[x][0]+1)*sizeof(int));
a[x][a[x][0]]=y;
a2[y][0]++;
a2[y]=(int *)realloc(a2[y],(a2[y][0]+1)*sizeof(int));
a2[y][a2[y][0]]=x;
}
for(i=1;i<=n;i++)
if(!v[i])
dfs(i);
for(i=n;i>=1;i--)
if(v[p[i]])
++nr,dfs1(p[i]);
g<<nr<<"\n";
for(i=1;i<=nr;i++)
{
for(j=1;j<=b[i][0];j++)
g<<b[i][j]<<" ";
g<<"\n";
}
return 0;
}