Pagini recente » Cod sursa (job #2785030) | Cod sursa (job #2431526) | Cod sursa (job #890644) | Cod sursa (job #2657551) | Cod sursa (job #3271229)
#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> g[100001], gt[100001];
stack<int> nodes;
bool vis[100001];
void dfs(int node) {
vis[node] = 1;
for (int i = 0; i < g[node].size(); ++i) {
if (!vis[g[node][i]]) {
dfs(g[node][i]);
}
}
nodes.push(node);
}
vector<int> ans[100001];
int ctc;
void dfst(int node) {
vis[node] = 1;
ans[ctc].push_back(node);
for (int i = 0; i < gt[node].size(); ++i) {
if (!vis[gt[node][i]]) {
dfst(gt[node][i]);
}
}
}
int main() {
ifstream cin("ctc.in");
ofstream cout("ctc.out");
cin >> n >> m;
for (int i = 1; i <= m; ++i) {
int x, y;
cin >> x >> y;
g[x].push_back(y);
gt[y].push_back(x);
}
for (int i = 1; i <= n; ++i) {
if (!vis[i]) {
dfs(i);
}
}
memset(vis, 0, sizeof(vis));
while (!nodes.empty()) {
if (!vis[nodes.top()]) {
++ctc;
dfst(nodes.top());
}
nodes.pop();
}
cout << ctc << "\n";
for (int i = 1; i <= ctc; ++i) {
for (auto i : ans[i]) {
cout << i << " ";
}
cout << "\n";
}
}