void tarjan(ll x){
dfn[x]=low[x]=++ct;s.push(x);
for(auto y:e[x])
if(!dfn[y]) tarjan(y),low[x]=min(low[x],low[y]);
else if(vis[x]) low[x]=min(low[x],dfn[y]);
if(low[x]==dfn[x]){
tot++;
do{
belong[x]=tot;
vis[x=s.top()]=0;s.pop();
}while(low[x]!=dfn[x]);
}
}
得到了 90 pts。。