Pagini recente » Cod sursa (job #832684) | Cod sursa (job #2571472) | Cod sursa (job #303846) | Cod sursa (job #2071359) | Cod sursa (job #3243141)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
const int N = 1e5;
vector <int> e[N];
bool vis[N];
vector <int> ord1;
vector <int> ord2[N];
int cnt = 0;
void dfs(int node){
vis[node] = 1;
for(auto i:e[node]){
if(!vis[i])dfs(i);
}
ord1.push_back(node);
}
void dfs2(int node){
vis[node] = 0;
for(auto i:e[node]){
if(vis[i])dfs2(i);
}
ord2[cnt].push_back(node);
}
int main(){
int n,m;
fin>>n>>m;
for(int i = 0;i < m;i++){
int u,w;
fin>>u>>w;
u--;w--;
e[u].push_back(w);
}
for(int i = 0;i < n;i++){
if(!vis[i]){
dfs(i);
}
}
for(auto i:ord1){
if(vis[i])dfs2(i),cnt++;
}
fout<<cnt<<'\n';
for(int i = 0;i < cnt;i++){
for(auto j:ord2[i]){
fout<<j + 1<<' ';
}
fout<<'\n';
}
return 0;
}