void tarjan(int u,int father){
low[u] = dfn[u] = ++tar;
ins[u] = 1;sta[++top] = u;
for (auto v : E[u]){
//if (v == father) continue;
//把上面这一句去掉
if (!dfn[v]){
tarjan(v,u);low[u] = min(low[u],low[v]);
} else if (ins[v]) low[u] = min(low[u],dfn[v]);
} if (dfn[u] == low[u]){
++cnt;
do{
color[sta[top]] = cnt;
ins[sta[top]] = 0;
}while (sta[top--] != u);
}
}