Cod sursa(job #3307448)

Utilizator Zeno1789Zeno Ciuca Zeno1789 Data 20 august 2025 19:43:35
Problema Componente tare conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
using namespace std;

ifstream cin ("ctc.in");
ofstream cout ("ctc.out");

struct muchie {
    int s,d; 
}m[200002];

int *v[100002],*c[100002];
int nr[100002],q[100002],levmin[100002];
char u[100002];
int lev=1,ctc,p;

void afis(int x) {
	++ctc;
	int u=p;
	for(;q[p]!=x; --p);
	c[ctc]=new int[u-p+2];
	int i;
	for(i=0;i<=u-p;++i) {
		c[ctc][i]=q[p+i];
		levmin[q[p+i]]=0;
	}
	--p;
	c[ctc][i]=0;
}

void tarjan(int x) {
	u[x]=1;
	q[++p]=x;
	int levc=lev;
	levmin[x]=lev; 
	++lev;
	for (int i=1; i<=nr[x]; ++i) {
		if (!u[v[x][i]]) tarjan(v[x][i]);
		if (levmin[v[x][i]] && levmin[v[x][i]]<levmin[x]) levmin[x]=levmin[v[x][i]];  
	}
	if (levc==levmin[x]) afis(x);
}

int main() {
	int n,muchii;
	cin>>n>>muchii;
	for (int i=0; i<muchii; ++i) {
	    cin>>m[i].s>>m[i].d;
		++nr[m[i].s];
	}
	for (int i=1; i<=n; ++i) {
		v[i]=new int[nr[i]+1];
		v[i][0]=0;
	}
	for (int i=0; i<muchii; ++i) {
		v[m[i].s][++v[m[i].s][0]]=m[i].d;
	}
	for (int i=1; i<=n; ++i) {
		if (!u[i]) tarjan(i);
	}
	cout<<ctc;
	for (;ctc;--ctc) {
		for (int i=0; c[ctc][i]; ++i) {
			cout<<c[ctc][i];
		}
		cout<<'\n';
	}
}