Cod sursa(job #382905)

Utilizator GotenAmza Catalin Goten Data 14 ianuarie 2010 23:25:47
Problema Componente tare conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream.h>

int viz[100100],i,t,start[100100],st[100100],n,m,x,y,v[200100][2],w[200100][2],k,poz[100100],nr,sol[100100],a[100100],j;

void dfs(int nod)
{
	viz[nod]=1;
	t=start[nod];
	while(t)
	{
		if(!viz[v[t][0]])
			dfs(v[t][0]);
		t=v[t][1];
	}
	st[++k]=nod;
}

void dfsi(int nod)
{
	viz[nod]=0;
	t=poz[nod];
	while(t)
	{
		if(viz[w[t][0]])
			dfsi(w[t][0]);
		t=w[t][1];
	}
	a[nr+1]=++k;
	sol[k]=nod;
}

int main()
{
	ifstream f("ctc.in");
	ofstream g("ctc.out");
	f>>n>>m;
	for(i=1;i<=m;i++)
	{
		f>>x>>y;
		v[++k][0]=y;
		v[k][1]=start[x];
		start[x]=k;
		w[k][0]=x;
		w[k][1]=poz[y];
		poz[y]=k;
	}
	k=0;
	for(i=1;i<=n;i++)
		if(!viz[i])
			dfs(i);
	k=0;
	for(i=n;i;i--)
		if(viz[st[i]])
		{
			nr++;
			dfsi(st[i]);
		}	
	g<<nr<<'\n';
	for(i=1;i<=nr;i++)
	{
		for(j=a[i]+1;j<=a[i+1];j++)
			g<<sol[j]<<' ';
		g<<'\n';
	}
	return 0;
}