Pagini recente » Cod sursa (job #1804151) | Cod sursa (job #572269) | Cod sursa (job #1753882) | Cod sursa (job #1113271) | Cod sursa (job #3030950)
#include <bits/stdc++.h>
using namespace std;
#ifndef LOCAL
ifstream in("ctc.in");
ofstream out("ctc.out");
#define cin in
#define cout out
#endif // LOCAL
const int NMAX = 1e5 + 7;
vector<int> g[NMAX];
vector<int> rg[NMAX];
vector<vector<int>> cc;
vector<int> pre, cntc;
int viz[NMAX];
void dfs(int node) {
if(viz[node] == 1) return;
viz[node] = 1;
for(auto vec : g[node]) dfs(vec);
pre.push_back(node);
}
void col(int node) {
if(viz[node] == 2) return;
viz[node] = 2; cntc.push_back(node);
for(auto vec : rg[node]) col(vec);
}
int main()
{
int n, m; cin >> n >> m;
for(int i = 0; i < m; i++) {
int x, y; cin >> x >> y;
g[x].push_back(y);
rg[y].push_back(x);
}
for(int i = 1; i <= n; i++) {
if(viz[i] == 0) dfs(i);
}
reverse(pre.begin(), pre.end());
for(auto i : pre) {
if(viz[i] == 1) {
cntc.clear();
col(i);
cc.push_back(cntc);
}
}
cout << cc.size() << '\n';
for(auto c : cc) {
for(auto e : c) cout << e << " ";
cout << '\n';
}
return 0;
}