Pagini recente » Cod sursa (job #865647) | Cod sursa (job #2481228) | Cod sursa (job #2637342) | Cod sursa (job #1583118) | Cod sursa (job #3272450)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
void dfs(int node, vector<vector<int>>& adj, vector<bool>& visited, vector<int>& c) {
visited[node] = true;
for(auto& to: adj[node])
if(!visited[to])
dfs(to, adj, visited, c);
c.push_back(node);
}
int main() {
int n, m, i, x, y;
f >> n >> m;
vector<vector<int>> edges(n + 1), adj(n + 1), components;
vector<int> order;
vector<bool> visited(n + 1, false);
for(i = 0; i < m; ++i) {
f >> x >> y;
edges[x].push_back(y);
adj[y].push_back(x);
}
for(i = 1; i <= n; ++i)
if(!visited[i])
dfs(i, edges, visited, order);
visited.assign(n, false);
reverse(order.begin(), order.end());
for(auto& node: order)
if(!visited[node]) {
vector<int> component;
dfs(node, adj, visited, component);
components.push_back(component);
}
g << components.size() << '\n';
for(auto& c: components) {
for(auto& node: c) {
g << node << ' ';
}
g << '\n';
}
return 0;
}