Cod sursa(job #821501)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 22 noiembrie 2012 14:55:45
Problema Componente tare conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<string.h>
using namespace std;

#define NMAX 100001
#define pb push_back

ifstream f("ctc.in");
ofstream g("ctc.out");

vector <int> v[NMAX],vt[NMAX];
int viz[NMAX],st[NMAX],d;

void dfs(int nod)
{
	viz[nod]=1;
	for(vector <int> :: iterator it=v[nod].begin();it!=v[nod].end();it++)
		if(viz[*it]==0)
			dfs(*it);
	st[++st[0]]=nod;
}

void dfst(int nod)
{
	viz[nod]=1;
	if(d==1)
		g<<nod<<" ";
	for(vector <int> :: iterator it=vt[nod].begin();it!=vt[nod].end();it++)
		if(viz[*it]==0)
			dfst(*it);
}

int main ()
{
	int n,m,i,x,y,nc;
	f>>n>>m;
	for(i=1;i<=m;i++) {
		f>>x>>y;
		v[x].pb(y);
		vt[y].pb(x);
	}
	f.close();
	for(i=1;i<=n;i++)
		if(viz[i]==0)
			dfs(i);
	memset(viz,0,sizeof(viz));
	nc=0;
	for(i=n;i>=1;i--)
		if(viz[st[i]]==0) {
			dfst(st[i]);
			nc++;
		}
	g<<nc<<'\n';
	memset(viz,0,sizeof(viz));
	d=1;
	for(i=n;i>=1;i--)
		if(viz[st[i]]==0) {
			dfst(st[i]);
			g<<'\n';
		}
	g.close();
	return 0;
}