Cod sursa(job #2887353)

Utilizator bluestorm57Vasile T bluestorm57 Data 9 aprilie 2022 13:50:17
Problema Componente tare conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <deque>

using namespace std;

const int NMAX = 1e5 + 10;
vector < int > vo[NMAX], vi[NMAX];
bool viz[NMAX], viz2[NMAX];
vector < int > discovered, current_comp;
vector < vector < int > > comp;

void dfs(int node) {
	viz[node] = 1;
	for (auto it : vo[node]) {
		if (viz[it]) continue;
		dfs(it);
	}
	discovered.push_back(node);
}


void dfs2(int node) {
	viz2[node] = 1;
	current_comp.push_back(node);
	for (auto it : vi[node]) {
		if (viz2[it])
			continue;
		dfs2(it);
	}
}

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

	int  n, m;
	f >> n >> m;
	for (int i = 1; i <= m; i++) {
		int x, y;
		f >> x >> y;
		vo[x].push_back(y);
		vi[y].push_back(x);
	}
	f.close();

	for (int i = 1; i <= n; i++) {
		if (viz[i])
			continue;
		dfs(i);
	}

	reverse(discovered.begin(), discovered.end());

	for (auto it : discovered) {
		if (viz2[it]) continue;
		current_comp.clear();
		dfs2(it);
		comp.push_back(current_comp);
	}

	g << comp.size() << "\n";
	for (auto it : comp) {
		for (auto nodes : it)
			g << nodes << " ";
		g << "\n";
	}



	return 0;
}