Tarjan 縮點 模板

2021-09-25 14:33:35 字數 1023 閱讀 1803

縮點以後,整張圖變為dag(有向無環圖),此時運用拓撲排序/求出度入度就可以完成許多事

題目:

​#include#include#include#include#include#include#define  ll   long long

using namespace std;

const int maxn=100100;

struct edge

e[maxn];

int in[maxn];

int num[maxn],sum=0;

vector p[maxn];

int head[maxn],len=0;

int dnf[maxn],low[maxn],index,cnt,n,m,tot;

int vis[maxn],s[maxn];//棧

void build(int x,int y)

void tarjan(int x)

else if(vis[e[i].y])

}if(low[x]==dnf[x])

while(x!=s[index+1]);

//printf("\n");

}}int main()

for(int i=1;i<=n;i++)

if(!dnf[i]) tarjan(i);

for(int i=1;i<=n;i++)

for(int j=head[i];j!=-1;j=e[j].next)//遍歷所有的邊,求縮點後所有點的出度

//cout

/*for(int i=1;i<=sum;i++)//測試用**

// cout

for(int j=0;jint flag=0,id=0;

for(int i=1;i<=sum;i++)

if(in[i]==0) flag++,id=i;

if(flag!=1)

cout<}​

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...

tarjan縮點 求橋模板

這麼一看縮點用tarjan也沒必要啊,用之前那個存反向邊dfs兩次的做法就行了 縮點過程就是遍歷邊,兩側不同scc就加邊 include pragma comment linker,stack 1024000000,1024000000 include include include include...