Pagini recente » Cod sursa (job #7820) | Cod sursa (job #312479) | Cod sursa (job #1067644) | Cod sursa (job #2837001) | Cod sursa (job #2773077)
#include <bits/stdc++.h>
#define NMAX 100001
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector<int> a[NMAX], a_t[NMAX];
vector<int> ctc[NMAX];
bitset<NMAX> viz;
stack<int> stiva;
int cnt;
void dfs(int k) {
viz[k] = 1;
for(auto x : a[k])
if(!viz[x])
dfs(x);
stiva.push(k);
}
void dfs_t(int k) {
viz[k] = 1;
ctc[cnt].push_back(k);
for(auto x: a_t[k])
if(!viz[x])
dfs_t(x);
}
int main() {
int n, m;
fin >> n >> m;
for (int i = 0; i < m; i++) {
int x, y;
fin >> x >> y;
a[x].push_back(y);
a_t[y].push_back(x);
}
for(int i = 1; i <= n; i++)
if (!viz[i])
dfs(i);
viz.reset();
while(!stiva.empty()) {
int x = stiva.top();
stiva.pop();
if(!viz[x])
{
cnt++;
dfs_t(x);
}
}
fout << cnt << '\n';
for(int i = 1; i <= cnt; i++) {
for(auto x : ctc[i])
fout << x << ' ';
fout << '\n';
}
}