Pagini recente » Cod sursa (job #1491768) | Cod sursa (job #369620) | Cod sursa (job #1718807) | Cod sursa (job #1824090) | Cod sursa (job #2365852)
#include<fstream>
#include<algorithm>
#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,niv[DN],low[DN],nr,instk[DN],cnt;
vector<int>v[DN],r[DN];
stack<int>stk;
void dfs(int nod)
{
niv[nod]=low[nod]=++nr;
stk.push(nod);
instk[nod]=1;
for(auto i:v[nod])
if(niv[i])
{
if(instk[i])
low[nod]=min(low[nod],low[i]);
}
else
{
dfs(i);
low[nod]=min(low[nod],low[i]);
}
if(niv[nod]==low[nod])
{
cnt++;
while(1)
{
f=stk.top();
stk.pop();
instk[f]=0;
r[cnt].pb(f);
if(f==nod)
break;
}
}
}
int main()
{
fin>>n>>m;
while(m--)
{
fin>>f>>g;
v[f].pb(g);
}
for(int i=1;i<=n;i++)
if(!niv[i])
dfs(i);
fout<<cnt<<'\n';
for(int h=1;h<=cnt;h++)
{
for(auto i:r[h])
fout<<i<<' ';
fout<<'\n';
}
}