Pagini recente » Cod sursa (job #2830090) | Cod sursa (job #1599279) | Cod sursa (job #1403615) | Cod sursa (job #625721) | Cod sursa (job #2054620)
#include <iostream>
#include <fstream>
#include <vector>
#define NM 100001
using namespace std;
ifstream fin ("ctc.in");
ofstream fout ("ctc.out");
vector <int> G[NM], GT[NM], CTC[NM];
int st[NM], viz[NM];
int n, m, t, k;
void dfs (int x) {
int i, w;
viz[x] = 1;
for (i = 0; i < G[x].size(); ++i) {
w = G[x][i];
if (!viz[w]) dfs(w);
}
st[++t] = x;
}
void dfst (int x) {
int i, w;
viz[x] = 1;
CTC[k].push_back(x);
for (i = 0;i < GT[x].size(); ++i) {
w = GT[x][i];
if (!viz[w]) dfst(w);
}
}
int main() {
int i, j;
int x, y;
fin >> n >> m;
for (i = 1; i <= m; ++i) {
fin >> x >> y;
G[x].push_back(y);
GT[y].push_back(x);
}
for (i = 1; i <= n; ++i)
if (!viz[i]) dfs(i);
for (i = 1; i <= n; ++i) viz[i] = 0;
for (i = n; i >= 1; --i)
if (!viz[st[i]]) {
++k;
dfst(st[i]);
}
fout << k << '\n';
for (i = 1; i <= k; ++i) {
for (j = 0; j < CTC[i].size(); ++j)
fout << CTC[i][j] << ' ';
fout << '\n';
}
}