Pagini recente » Cod sursa (job #214809) | Cod sursa (job #321046) | Cod sursa (job #2468667) | Cod sursa (job #1896628) | Cod sursa (job #3195050)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector <int> G[100002];
vector <int> GT[100002];
vector <int> out;
vector <int> sol[100002];
bitset <100002> viz;
void dfs(int nod){
viz[nod] = 1;
for(auto x : G[nod]){
if(!viz[x]) dfs(x);
}
out.push_back(nod);
}
void dfs2(int nod, vector <int> &v){
viz[nod] = 1;
v.push_back(nod);
for(auto x : GT[nod]){
if(!viz[x]) dfs2(x,v);
}
}
int main()
{
int n,m,i,u,v,k = 0;
fin >> n >> m;
for(i = 1; i <= m; i++){
fin >> u >> v;
if(find(G[u].begin(), G[u].end(), v) != G[u].end()) continue;
G[u].push_back(v);
GT[v].push_back(u);
}
for(i = 1; i <= n; i++) if(!viz[i]) dfs(i);
viz.reset();
reverse(out.begin(), out.end());
for(auto x : out)
if(!viz[x]) dfs2(x, sol[++k]);
fout << k << "\n";
for(i = 1; i <= k; i++){
for(auto x : sol[i]) fout << x << " ";
fout << "\n";
}
return 0;
}