Pagini recente » Cod sursa (job #785920) | Cod sursa (job #1030262) | Cod sursa (job #2311875) | Cod sursa (job #2661008) | Cod sursa (job #2949159)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector<int>v[100010],vt[100010],ctc[100010];
stack<int>s;
int n,m,x,y,i,viz[100010],cnt,nod;
void dfs(int nod)
{
viz[nod]=1;
for(auto it:v[nod])
if(!viz[it])
dfs(it);
s.push(nod);
}
void dfsT(int nod)
{
viz[nod]=1;
ctc[cnt].push_back(nod);
for(auto it:vt[nod])
if(!viz[it])
dfsT(it);
}
int main()
{
fin>>n>>m;
while(m--)
{
fin>>x>>y;
v[x].push_back(y);
vt[y].push_back(x);
}
for(i=1;i<=n;i++)
if(!viz[i])
dfs(i);
memset(viz,0,sizeof(viz));
while(!s.empty())
{
nod=s.top();
s.pop();
if(viz[nod])
continue;
cnt++;
dfsT(nod);
}
fout<<cnt<<'\n';
for(i=1;i<=cnt;i++)
{
for(auto j:ctc[i])
fout<<j<<" ";
fout<<'\n';
}
return 0;
}