Pagini recente » Cod sursa (job #2063110) | Cod sursa (job #772361) | Cod sursa (job #1902723) | Cod sursa (job #2771786) | Cod sursa (job #2467606)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
vector <int> G[100003];
vector <int> Gt[100003];
vector <int> S[100003];
vector <int> :: iterator it;
bool sel[100003];
int n,SOL,m,k1,k2,x,y;
int sol[100003];
void df1(int x)
{
sel[x]=true;
for(auto it:G[x])
{
if(!sel[it])
df1(it);
}
sol[++k1]=x;
}
void df2(int x)
{
sel[x]=true;
S[SOL].push_back(x);
for(auto it:Gt[x])
{
if(!sel[it])
df2(it);
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>x>>y;
G[x].push_back(y);
Gt[y].push_back(x);
}
for(int i=1;i<=n;i++)
{
if(!sel[i])
df1(i);
}
for(int i=1;i<=n;i++)
sel[i]=false;
for(int i=k1;i>=1;i--)
{
if(!sel[sol[i]])
{
SOL++;
df2(sol[i]);
}
}
g<<SOL<<'\n';
for(int i=1;i<=SOL;i++)
{
for(auto it:S[i])
{
g<<it<<" ";
}
g<<'\n';
}
return 0;
}