Cod sursa(job #2328157)

Utilizator patcasrarespatcas rares danut patcasrares Data 25 ianuarie 2019 14:35:36
Problema Componente tare conexe Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
#include<vector>
#include<stack>
#define pb push_back
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
const int DN=1e5+5;
int n,m,f,g,viz[DN],niv[DN],low[DN],cnt,ins[DN];
vector<int>v[DN],r[DN];
stack<int>stk;
void dfs(int nod)
{
	viz[nod]=1;
	low[nod]=niv[nod];
	stk.push(nod);
	ins[nod]=1;
	for(auto i:v[nod])
	{
		if(viz[i])
		{
			if(ins[i])
				low[nod]=min(low[nod],low[i]);
			continue;
		}
		niv[i]=niv[nod]+1;
		dfs(i);
		low[nod]=min(low[nod],low[i]);
	}
	if(low[nod]==niv[nod])
		{
			cnt++;
			do
			{
				f=stk.top();
				ins[f]=0;
				stk.pop();
				r[cnt].pb(f);
			}while(f!=nod);
		}
}
int main()
{
	fin>>n>>m;
	while(m--)
	{
		fin>>f>>g;
		v[f].pb(g);
	}
	for(int i=1;i<=n;i++)
		if(!viz[i])
		{
			niv[i]=1;
			dfs(i);
		}
	fout<<cnt<<'\n';
	for(int h=1;h<=cnt;h++)
	{
		for(auto i:r[h])
			fout<<i<<' ';
		fout<<'\n';
	}
}