Tarjan縮點 SPFA 縮點

2021-08-09 06:27:46 字數 1014 閱讀 9602

洛谷p3387縮點

tarjan+spfa求dag上單源最短路模板題

用tarjan在原圖上求scc 縮點

用縮點之後的scc建乙個有向無環圖

scc權為此scc內所有點點權和

在新建的dag上將scc權視為邊權跑spfa

求scc[1]到scc[n]的最長路即為所求答案

#include #include #include #include using namespace std;

bitset <200010> g,in; stacks;

queueq; long long dis[20010],ans=0;

int n,m,u,v,cnt=0,num,t=0,s;

struct wayp[200010];

int he[20010],dfn[20010],low[20010];

int scc[20010],w[20010];

void dfs(int pos);

inline void add();

void search(int pos);

inline void spfa();

int main()

inline void spfa()

k=p[k].ne;}}

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

if(dis[i]>ans)

ans=dis[i];

}void dfs(int pos)

k=p[k].ne;

}return ;

}void search(int pos)

{ g[pos]=1; s.push(pos);

dfn[pos]=++t; low[pos]=dfn[pos];

int k=he[pos];

while(k!=0)

{if(g[p[k].en]==0)

{search(p[k].en);

if(low[p[k].en]

Tarjan演算法 縮點

我們這一篇是在已經了解tarjan演算法的基礎之上開始寫的,如果不了解的話,請先看大牛們 關於tarjan演算法的部落格。首先我們對於乙個有向無環的圖 dag 至少新增幾條邊才能使它變為強連通圖?我們很容易根據有向無環圖的性質得到,我們計算入度為零的點數為a,出度為零的點數為b,那麼我們至少需要新增...

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