tarjan縮點 求橋模板

2021-08-13 03:37:59 字數 1155 閱讀 4675

這麼一看縮點用tarjan也沒必要啊,用之前那個存反向邊dfs兩次的做法就行了

縮點過程就是遍歷邊,兩側不同scc就加邊

#include//#pragma comment(linker, "/stack:1024000000,1024000000")

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define pb push_back

#define for(a) for(int i=1;i<=a;i++)

#define sqr(a) (a)*(a)

const int maxn=1e6+7;

struct edgeedge[maxn<<1];

int head[maxn],edgenum;

void add(int u,int v,int d);head[u]=edgenum++;

}int dfn[maxn],low[maxn],stack[maxn],top,time;

//low[u]是u的子樹反向弧能指向的最靠近總根的祖先的時間戳

int taj;

int belong[maxn]; //連通分量所屬

bool instack[maxn];

vectorbcc[maxn];

void tarjan(int u,int fa){

dfn[u]=low[u]=++time;

stack[top++]=u;

instack[u]=1;

for(int i=head[u];~i;i=edge[i].nxt){

int v=edge[i].to;

if(dfn[v]==-1){

tarjan(v,u);

low[u]=min(low[u],low[v]);

if(dfn[u]g[maxn];

int du[maxn];

void suodian(){

memset(du,0,sizeof du);

for(int i=1;i<=taj;i++)g[i].clear();

for(int i=0;i

Tarjan 縮點 模板

縮點以後,整張圖變為dag 有向無環圖 此時運用拓撲排序 求出度入度就可以完成許多事 題目 include include include include include include define ll long long using namespace std const int maxn 1...

tarjan 模板 縮點

傳送門 首先呢,tarjan找乙個圖的強連通分量是基於對圖的dfs的。這中間開了乙個dfn代表dfs序,還有個low代表該節點在dfs形成的樹中能到達的最近的根。然後分情況進行更新 一會兒看我 吧 為了記錄乙個強聯通分量,我們還要在開乙個棧來儲存當前查詢的強連通分量。如果low x dfn x 那就...

學習 模板 tarjan縮點

我美好的早上就被tarjan毀掉了 微笑 放資料qwq謝謝你們讓我學會了tarjan 前兩個還是讓我了解了tarjan而最後乙個可就厲害了還讓我鞏固了topo sort dag 上的dp!學習筆記詳見注釋quq 1 include2 include3 include4 define maxn 100...