Tarjan eDcc 缩点
概念
无向图中极大的不包含割边的连通块被称为“边双连通分量”。
typedef pair<int,int> PII;
int n,m;
vector<PII> edges[N];
stack<int> stk;
int dcc[N],dfn[N],low[N],tot,cnt;
int degree[N];
struct edge{
int u,v;
};
vector<edge> e;
void tarjan(int u,int last){
dfn[u]=low[u]=++tot;
stk.push(u);
for(auto &[v,id]:edges[u]){
if(id==last)
continue;
if(!dfn[v]){
tarjan(v,id);
low[u]=min(low[u],low[v]);
// if(low[v]>dfn[u]){
// ;
// }
}
else{
low[u]=min(low[u],dfn[v]);
}
}
if(low[u]==dfn[u]){
++cnt;
int v;
do{
v=stk.top();
stk.pop();
dcc[v]=cnt;
}while(v!=u);
}
}

浙公网安备 33010602011771号