Pagini recente » Cod sursa (job #3364103) | Cod sursa (job #3364358) | Cod sursa (job #3364170) | Cod sursa (job #3364437) | Cod sursa (job #3364541)
#include <bits/stdc++.h>
#define N 100005
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int n,m,ct;
vector<int> v[N],f[N];
bool viz[N];
stack<int> st;
vector<int> ctc[N];
void DFS(int X)
{
viz[X]=1;
for(int nod:v[X]) {
if(viz[nod]==0) DFS(nod);
}
st.push(X);
}
void DFS_K(int X)
{
viz[X]=1;
ctc[ct].push_back(X);
for(int nod:f[X])
if(viz[nod]==0) DFS_K(nod);
}
int main() {
fin>>n>> m;
for (int i=0; i<m; i++)
{
int x,y;
fin>>x>>y;
v[x].push_back(y);
f[y].push_back(x);
}
for(int i=1; i<=n; i++)
if(viz[i]==0) DFS(i);
for(int i=1; i<=n; i++)
viz[i]=0;
while(!st.empty())
{
int X=st.top();
st.pop();
if(viz[X]==0) ct++,DFS_K(X);
}
fout<<ct<<"\n";
for(int i=1; i<=ct; i++)
{
for(auto nod:ctc[i]) fout<<nod<<" ";
fout<<"\n";
}
return 0;
}