洛谷P1807 拓撲排序 染色 最短路思想

2021-10-24 21:17:46 字數 1098 閱讀 1587

題目鏈結-p1807

這道題的最簡單的解法應該是將初始給的權值全部取負,然後對給定的圖跑任意乙個最短路的板子,將得到的「最短路長度」再取負得到的就是最終的答案

但是因為在學習拓撲排序,就跟著大佬的拓撲思路寫了一遍拓撲的解,感覺還是有一些收穫的

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int maxn=

2e5+50;

const

int inf=

0x7fffffff

;const

int mod=

1e9+7;

const

int hash=

131;

int a[maxn]

;int b[maxn]

;int degree[maxn]

;int vis[maxn]

;int dis[maxn]

;vector v[maxn]

;struct node

;int

main()

);degree[y]++;

} vis[1]

=1;//給定1染色

dis[n]=-

1;//賦初始值為-1,不連通時其值不改變,方便直接輸出答案

queue<

int> q;

for(

int i=

1;i<=n;i++)}

while

(!q.

empty()

)if(vis[tmp]

)//檢查是否與1連通(是否被染色)}}

cout<

}

洛谷 P1807 最長路(拓撲排序)

題目大意 n個頂點的帶權有向無環圖,邊權可能為負值,求1到n的最長路,無法到達則輸出 1思路 拓撲排序,直接先將入度為0的入隊,定義dis陣列,先全部設定成乙個極小值,dis i 為i號頂點到1的距離,然後拓撲排序過程中更新dis,若最後dis n 仍為極小值輸出 1,否則輸出dis n inclu...

洛谷 P1807 最大路

這是一道拓撲的水題,emmm 求圖中的最長路 原題戳顯然可以用最短路寫,顯然,也可以用拓撲排序寫 top是正宗!這裡只給出拓撲排序的做法 因為是求從1到n的最大路,所以只有1能到的點才能更新,所以需要乙個標記陣列,儲存被誰更新,被1更新過就可以去更新其他點 乙個點的最大路 max 如下 by ace...

洛谷 P1807最長路

設g為有n個頂點的有向無環圖,g中各頂點的編號為1到n,且當為g中的一條邊時有i j。設w i,j 為邊的長度,請設計演算法,計算圖g中 1,n 間的最長路徑。輸入格式 輸入檔案longest.in的第一行有兩個整數n和m,表示有n個頂點和m條邊,接下來m行中每行輸入3個整數a,b,v 表示從a點到...