Pagini recente » Cod sursa (job #1717716) | Istoria paginii runda/qwerty-9 | Cod sursa (job #2959991) | Monitorul de evaluare | Cod sursa (job #2205756)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> g[100005];
vector<int> gt[100005];
vector<int> l;
bool viz[100005];
int cont;
vector<int> comp[100005];
void dfs(int nod)
{
viz[nod]=1;
for(int v : g[nod])
if(!viz[v])
dfs(v);
l.push_back(nod);
}
void dfst(int nod)
{
viz[nod]=1;
for(int v : gt[nod])
if(!viz[v])
dfst(v);
comp[cont].push_back(nod);
}
int main()
{ freopen("ctc.in", "r",stdin);
freopen("ctc.out", "w",stdout);
int n,m,i,x,y;
scanf("%d%d", &n, &m);
for(i=1; i<=m; i++){
scanf("%d%d", &x, &y);
g[x].push_back(y);
gt[y].push_back(x);
}
for(i=1; i<=n; i++)
if(!viz[i])
dfs(i);
reverse(l.begin(), l.end());
for(int u : l)
viz[u]=0;
for(int u : l){
if(!viz[u]){
cont++;
dfst(u);
}
}
printf("%d\n", cont);
for(i=1; i<=cont; i++){
for(int u : comp[i])
printf("%d ", u);
printf("\n");
}
return 0;
}