Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <algorithm>#include <stack>#include <unordered_map>using namespace std;const int _ = 20004, MAXM = 200005;int Dfn[_], Low[_], Head[_];int Next[MAXM], Edge[MAXM], Ans[MAXM], Dcg[MAXM];stack<int> Sta;unordered_map<int, int> Label;void tarjan(int u, int p){static int cnt = 0;Dfn[u] = Low[u] = ++cnt;for(int e = Head[u]; e != 0; e = Next[e]){int num = (e + 1) / 2;int v = Edge[e];if(Dcg[num]){continue;}if(Dfn[v] == 0){Sta.push(num);tarjan(v, u);Low[u] = min(Low[u], Low[v]);}else if(v != p){Sta.push(num);Low[u] = min(Low[u], Dfn[v]);