Pagini recente » Cod sursa (job #81955) | Cod sursa (job #787167) | Cod sursa (job #2963762) | Cod sursa (job #1116859) | Cod sursa (job #3269032)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int n, m, r;
vector<int> gn[100001], gt[100001];
set<int> sol[100001];
stack<int> st, comp;
bool v[100001];
void dfs(int p, stack<int>& noduri, vector<int> g[]){
v[p]=1;
for(auto it : g[p]){
if(!v[it]){
dfs(it, noduri, g);
}
}
noduri.push(p);
}
int main()
{
fin>>n>>m;
for(int i=1; i<=m; i++){
int x, y;
fin>>x>>y;
gn[x].push_back(y);
gt[y].push_back(x);
}
for(int i=1; i<=n; i++){
if(!v[i]) dfs(i, st, gn);
}
for(int i=1; i<=n; i++) v[i]=0;
while(!st.empty()){
int p=st.top();
st.pop();
if(!v[p]){
dfs(p, comp, gt);
while(!comp.empty()){
sol[r].insert(comp.top());
comp.pop();
}
r++;
}
}
fout<<r<<'\n';
for(int i=0; i<r; i++){
for(auto it : sol[i]) fout<<it<<' ';
fout<<'\n';
}
return 0;
}