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