RT
inline void Tarjan(int x)
{
dfn[x]=low[x]=++index;
flag[x]=1;push(x);
for(int i=0;i<map[x].size();i++)
{
int next=map[x][i];
if(dfn[next]==-1)
{
Tarjan(next);
low[x]=min(low[x],low[next]);
}
else
{
if(flag[next])
low[x]=min(low[x],low[next]);
}
}
if(dfn[x]==low[x])
{
int temp;Bcnt++;
while(1)
{
temp=pop();
belong[temp]=Bcnt;
flag[temp]=0;
if(temp==x)
break;
}
}
}