-无向图求点双联通分量 并求单环
将桥和割点分开讨论
注意判断根是否为割点
stack<int> W;
ll f[maxnn];
int scc=0;
ll sum[maxnn];
int ttt[maxnn];
int ma[maxnn],mi[maxnn];
void tarjan(int v,int fa) {
int r;
mark[v]=1;
dfn[v]=low[v]=++vis;
W.push(v);
for(int i=las[v]; i; i=nex[i]) {
int u=en[i];
int d;
if(u!=fa) {
if(!dfn[u]) {
tarjan(u,v);
low[v]=min(low[v],low[u]);
if(dfn[v]==low[u]) {
scc++;
mi[scc]=v;
rrr[scc]=1;
ma[scc]=v;
do {
d=W.top();
rrr[scc]++;
mi[scc]=min(mi[scc],d);
ma[scc]=max(ma[scc],d);
W.pop();
} while(d!=u);
}
if(dfn[v]<low[u]) {
do {
d=W.top();
W.pop();
} while(d!=u);
}
} else {
low[v]=min(low[v],dfn[u]);
}
}
}
}stack<in