Pagini recente » Cod sursa (job #628798) | Cod sursa (job #756716) | Cod sursa (job #1062134) | Cod sursa (job #2846649) | Cod sursa (job #2974077)
#include <bits/stdc++.h>
#define NM 100010
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector <int> g[NM],gt[NM],ctc[NM];
int x,y,i,n,m,cnt,viz[NM];
stack <int> s;
void dfs(int nod)
{
viz[nod]=1;
for(auto it:g[nod])
if(viz[it]==0)
dfs(it);
s.push(nod);
}
void dfsgt(int nod)
{
viz[nod]=1;
ctc[cnt].push_back(nod);
for(auto it:gt[nod])
if(viz[it]==0)
dfsgt(it);
}
int main()
{
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
g[x].push_back(y);
gt[y].push_back(x);
}
for(i=1;i<=n;i++)
if(viz[i]==0)
dfs(i);
memset(viz,0,sizeof(viz));
while(!s.empty())
{
x=s.top();
s.pop();
if(viz[x])
continue;
cnt++;
dfsgt(x);
}
fout<<cnt<<'\n';
for(i=1;i<=n;i++)
{
for(auto it:ctc[i])
fout<<it<<" ";
fout<<'\n';
}
}