Pagini recente » Cod sursa (job #2684876) | Cod sursa (job #387524) | Profil ionanghelina | Profil ionanghelina | Cod sursa (job #3041653)
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
const int N=1e5+5;
int n,m,X,Y;
vector<int>a[N],b[N];
deque<int>st;
bool viz[N];
vector<vector<int>>ans;
vector<int>comp;
void dfs(int nod)
{
viz[nod]=true;
for(auto x: a[nod])
if(viz[x]==0)
dfs(x);
st.push_front(nod);
}
void dfs_back(int nod)
{
viz[nod]=true;
for(auto x: b[nod])
if(viz[x]==false)
dfs_back(x);
comp.push_back(nod);
}
int main()
{
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>X>>Y;
a[X].push_back(Y);
b[Y].push_back(X);
}
for(int i=1;i<=n;i++)
if(viz[i]==false)
dfs(i);
for(int i=1;i<=n;i++)
viz[i]=false;
for(auto x: st)
{
if(viz[x]==0)
{
comp.clear();
dfs_back(x);
ans.push_back(comp);
}
}
g<<ans.size()<<'\n';
for(auto x: ans)
{
for(auto y: x)
g<<y<<" ";
g<<'\n';
}
return 0;
}