Pagini recente » Cod sursa (job #1844514) | Cod sursa (job #252108) | Cod sursa (job #2284864) | Cod sursa (job #335667) | Cod sursa (job #2328157)
#include<fstream>
#include<vector>
#include<stack>
#define pb push_back
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
const int DN=1e5+5;
int n,m,f,g,viz[DN],niv[DN],low[DN],cnt,ins[DN];
vector<int>v[DN],r[DN];
stack<int>stk;
void dfs(int nod)
{
viz[nod]=1;
low[nod]=niv[nod];
stk.push(nod);
ins[nod]=1;
for(auto i:v[nod])
{
if(viz[i])
{
if(ins[i])
low[nod]=min(low[nod],low[i]);
continue;
}
niv[i]=niv[nod]+1;
dfs(i);
low[nod]=min(low[nod],low[i]);
}
if(low[nod]==niv[nod])
{
cnt++;
do
{
f=stk.top();
ins[f]=0;
stk.pop();
r[cnt].pb(f);
}while(f!=nod);
}
}
int main()
{
fin>>n>>m;
while(m--)
{
fin>>f>>g;
v[f].pb(g);
}
for(int i=1;i<=n;i++)
if(!viz[i])
{
niv[i]=1;
dfs(i);
}
fout<<cnt<<'\n';
for(int h=1;h<=cnt;h++)
{
for(auto i:r[h])
fout<<i<<' ';
fout<<'\n';
}
}