Cod sursa(job #2887340)

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

using namespace std;

const int inf = 1e9;
const int NMAX = 1e5 + 10;
vector < int > v[NMAX];
vector < int > vo[NMAX];
vector < int > discovered;
int viz[NMAX], viz2[NMAX];

vector < vector < int > > comp;
vector < int > current_comp;

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

void dfs2(int node) {
	viz2[node] = 1;
	current_comp.push_back(node);
	for (auto it : vo[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;
		v[x].push_back(y);
		vo[y].push_back(x);
	}
	f.close();
	
	for (int i = 1; i <= n; i++) {
		if (viz[i]) continue;
		dfs(i);
	}

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

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