Pagini recente » Cod sursa (job #759835) | Cod sursa (job #847164) | Cod sursa (job #523923) | Cod sursa (job #2703803) | Cod sursa (job #2611812)
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define all(a) (a).begin(), (a).end()
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#define sz() size()
#define fr first
#define sc second
#define pi pair<int,int>
#define int long long
#define mp make_pair
#define rc(s) return cout<<s,0
#define rcc(s) cout<<s,exit(0)
using namespace std;
const int nmax=100005;
int n,m,_next=-1;
vector<int>nod[nmax],top_sort,comp[nmax];
bitset<nmax>viz;
void DFS1(int s){
comp[_next].push_back(s);
viz[s]=1;
for(auto it:nod[s]){
if(!viz[it]) DFS1(it);
}
}
void DFS(int s){
viz[s]=1;
for(auto it:nod[s]){
if(!viz[it]) DFS(it);
}
top_sort.push_back(s);
}
int32_t main(){
ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
srand(chrono::steady_clock::now().time_since_epoch().count());
ifstream cin("ctc.in");
ofstream cout("ctc.out");
cin >> n >> m;
for(int i=1;i<=m;i++){
int x,y;
cin >> x >> y;
nod[x].push_back(y);
}
for(int i=1;i<=n;i++){
if(!viz[i]) DFS(i);
}
viz.reset();
for(auto i:top_sort){
if(!viz[i]){
_next++;
DFS1(i);
}
}
cout << _next+1 << '\n';
for(int i=0;i<=_next;i++){
for(auto it:comp[i]) cout << it << ' ';
cout << '\n';
}
}