Pagini recente » Cod sursa (job #304155) | Cod sursa (job #2028527) | Cod sursa (job #2463849) | Cod sursa (job #1183795) | Cod sursa (job #3147393)
#include<fstream>
#include<vector>
using namespace std;
ifstream F("ctc.in");
ofstream G("ctc.out");
#define N 100001
vector<int> g[N];
int n,m,i,d,c[N],l[N],r,v[N],s[2*N],q[2*N],u,t;
void T(int i)
{
int k,j,o,w;
s[++t]=i,v[i]=!v[i]?1:v[i],l[i]=c[i]=d++;
for(w=g[i].size(),j=0;j<w;++j)
if(!c[g[i][j]]) {
T(g[i][j]);
if(l[i]>l[g[i][j]])
l[i]=l[g[i][j]];
} else if(v[g[i][j]]==1&&l[i]>c[g[i][j]])
l[i]=c[g[i][j]];
if(c[i]==l[i]) {
for(k=0,++r;t;) {
o=s[t--];
if(o==i||v[o]!=1)
break;
q[++u]=o,++k,v[o]=2;
}
if(v[i]==1)
v[i]=2,++k,q[++u]=i;
if(!k)
--r;
else
q[++u]=0;
}
}
int main()
{
F>>n>>m;
while(m--)
F>>i>>d,g[i].push_back(d);
for(i=1;i<=n;++i)
if(!c[i])
T(i);
for(G<<r<<"\n",--u;u;--u)
if(!q[u])
G<<"\n";
else
G<<q[u]<<" ";
return 0;
}