Pagini recente » Cod sursa (job #1236640) | Cod sursa (job #3166827) | Cod sursa (job #2543987) | Cod sursa (job #981433) | Cod sursa (job #1413713)
#include <fstream>
#include <vector>
#include <bitset>
#include <algorithm>
#include <deque>
using namespace std;
#define N 100004
int n,k,r,e[N],l[N];
vector <int> v[N],s[N];
deque <int> q;
bitset <N> u;
void tarjan(int x)
{
e[x]=++k;
l[x]=k;
q.push_back(x);
u[x]=1;
for(int i=0;i<v[x].size();i++)
{
if(!e[v[x][i]])
{
tarjan(v[x][i]);
l[x]=min(l[x],l[v[x][i]]);
}
else if(u[v[x][i]])
l[x]=min(l[x],l[v[x][i]]);
}
if(e[x]==l[x]&&!q.empty())
{
do{
u[q.back()]=0;
s[r].push_back(q.back());
q.pop_back();
}while(!q.empty()&&q.back()!=x);
r++;
}
}
int main()
{
ifstream in("ctc.in");
ofstream out("ctc.out");
int m,i,j,x,y;
in>>n>>m;
while(m--)
{
in>>x>>y;
v[x].push_back(y);
}
for(i=1;i<=n;++i)
if(!e[i])
tarjan(i);
out<<r<<'\n';
for(i=0;i<r;i++)
{
for(j=0;j<s[i].size();j++)
out<<s[i][j]<<' ';
out<<'\n';
}
return 0;
}