[Connected graph] links an undirected graph node and a bridge Tarjan to connect tarjan.
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 1e5, M = 1e5;struct Edge { int v, next, idx; Edge(){} Edge(int _v, int _next, int _idx): v(_v), next(_next), idx(_idx){}}e[M];int low[N], dfn[N], deep, head[N], tot;bool iscut[N], isbri[M];void __init__(){ tot = deep = 0; memset(head, -1, sizeof(head)); memset(iscut, 0, sizeof(iscut));}void add(int u, int v, int idx){ e[tot++] = Edge(v, head[u], idx); head[u] = tot++;}int dfs(int u, int fa){ int lowu = dfn[u] = ++deep; int cnt = 0; for(int i = head[u]; ~i; i = e[i].next) { int v = e[i].v; if(!dfn[v]) { cnt++; int lowv = dfs(v, u); lowu = min(lowu, lowv); if(lowv >= dfn[u]) iscut[u] = true; if(lowv > dfn[u]) isbri[e[i].idx] = true; continue ; } if(dfn[v] < dfn[u] && v != fa) lowu = min(lowu, dfn[v]); } if(fa == -1 && cnt == 1) iscut[u] = false; return low[u] = lowu;}int main(){ __init__(); return 0;}