Pagini recente » Cod sursa (job #1375295) | Cod sursa (job #3180437) | Cod sursa (job #2734881) | Cod sursa (job #1103673) | Cod sursa (job #2407491)
#include <bits/stdc++.h>
#define NM 100005
using namespace std;
ifstream fin ("ctc.in");
ofstream fout ("ctc.out");
void read();
int n, m, nr;
vector<int> t, cc;
vector<int> v[NM], inv[NM];
bitset<NM> viz;
void dfs(int nod)
{
viz[nod] = 1;
for(auto it : v[nod])
if(!viz[it])
dfs(it);
t.push_back(nod);
}
void kosaraju(int nod)
{
cc.push_back(nod);
viz[nod] = 1;
for(auto it : inv[nod])
if(!viz[it])
kosaraju(it);
}
int main()
{
read();
for(int i=1; i<=n; i++)
if(!viz[i])
dfs(i);
viz.reset();
for(vector<int>::reverse_iterator it=t.rbegin(); it!=t.rend(); ++it)
if(!viz[*it])
{
++nr;
kosaraju(*it);
}
fout << nr << '\n';
viz.reset();
for(vector<int>::reverse_iterator it=t.rbegin(); it!=t.rend(); ++it)
if(!viz[*it])
{
cc.clear();
kosaraju(*it);
sort(cc.begin(), cc.end());
for(auto afisare : cc)
fout << afisare << ' ';
fout << '\n';
}
return 0;
}
void read()
{
fin >> n >> m;
for(int i=1; i<=m; i++)
{
int x, y;
fin >> x >> y;
v[x].push_back(y);
inv[y].push_back(x);
}
}