Pagini recente » Cod sursa (job #1383972) | Cod sursa (job #3158953) | Cod sursa (job #1709926) | Cod sursa (job #306000) | Cod sursa (job #3242243)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
void dfs(int v, const vector<vector<int>>& adj, vector<int>& vis, vector<int>& st) {
vis[v] = -1;
for (auto u : adj[v]) {
if (!vis[u]) {
dfs(u, adj, vis, st);
}
}
st.push_back(v);
}
void dfs2(int v, int root, const vector<vector<int>>& inv, vector<int>& vis) {
vis[v] = root;
for (auto u : inv[v]) {
if (vis[u] == -1) {
dfs2(u, root, inv, vis);
}
}
}
ifstream fin("ctc.in");
ofstream fout("ctc.out");
void solve() {
int n, m;
fin >> n >> m;
vector<int> st;
vector<vector<int>> adj(n, vector<int>()), inv(n, vector<int>());
while (m--) {
int x, y;
fin >> x >> y;
x--;
y--;
adj[x].push_back(y);
inv[y].push_back(x);
}
vector<int> vis(n, 0);
for (int i = 0; i < n; i++) {
if (!vis[i]) {
dfs(i, adj, vis, st);
}
}
int ans = 0;
vector<vector<int>> comp(n, vector<int>());
for (int i = n - 1; i >= 0; i--) {
if (vis[st[i]] == -1) {
ans++;
dfs2(st[i], ans, inv, vis);
}
}
fout << ans << endl;
for (int i = 0; i < n; i++) {
comp[vis[i]].push_back(i + 1);
}
for (int i = 1; i < ans + 1; i++) {
for (int j = 0; j < comp[i].size(); j++) {
fout << comp[i][j] << " ";
}
fout << endl;
}
}
int main() {
int t = 1;
while (t--) {
solve();
}
}