Pagini recente » Cod sursa (job #2733631) | Cod sursa (job #2868924) | Cod sursa (job #1433671) | Cod sursa (job #564538) | Cod sursa (job #2219224)
#include <bits/stdc++.h>
using namespace std;
int n,m,low[100010],ans,id[100010],node;
bool ved[100010],onst[100010];
stack<int> st;
vector<int> v[100010],c[100010];
int cc;
void dfs(int x)
{
ved[x]=1;
id[x]=low[x]=++cc;
st.push(x);
onst[x]=1;
for(int i=0;i<v[x].size();i++)
{
if(!ved[v[x][i]]) dfs(v[x][i]);
if(onst[v[x][i]]) low[x]=min(low[x],low[v[x][i]]);
}
if(low[x]==id[x])
{
while(node!=x)
{
node=st.top();
onst[node]=0;
st.pop();
c[ans].push_back(node);
low[node]=id[x];
}
ans++;
}
}
int main()
{
ifstream cin("ctc.in");
ofstream cout("ctc.out");
int a,b;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a>>b;
v[a].push_back(b);
}
for(int i=1;i<=n;i++)
{
if(!ved[i]) dfs(i);
}
cout<<ans;
for(int i=0;i<ans;i++)
{
cout<<'\n';
for(int j=0;j<c[i].size();j++)
cout<<c[i][j]<<' ';
}
return 0;
}