題目大意
n個頂點的帶權有向無環圖,邊權可能為負值,求1到n的最長路,無法到達則輸出-1思路
拓撲排序,直接先將入度為0的入隊,定義dis陣列,先全部設定成乙個極小值,dis[i]為i號頂點到1的距離,然後拓撲排序過程中更新dis,若最後dis[n]仍為極小值輸出-1,否則輸出dis[n]
**
#include
#include
#include
#include
#include
using
namespace std;
struct edge
;const
int n =
1505
;int n, m;
int dis[n]
;int chu[n]
, ru[n]
;vector g[n]
;queue <
int> q;
intmain()
);}for
(int i =
1; i <= n; i++
) dis[1]
=0;while
(!q.
empty()
)}if(dis[n]==-
100005
) cout <<-1
<< endl;
else cout << dis[n]
<< endl;
return0;
}
洛谷 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點到...
洛谷P1807 拓撲排序 染色 最短路思想
題目鏈結 p1807 這道題的最簡單的解法應該是將初始給的權值全部取負,然後對給定的圖跑任意乙個最短路的板子,將得到的 最短路長度 再取負得到的就是最終的答案 但是因為在學習拓撲排序,就跟著大佬的拓撲思路寫了一遍拓撲的解,感覺還是有一些收穫的 include include include incl...
洛谷 P1807 最大路
這是一道拓撲的水題,emmm 求圖中的最長路 原題戳顯然可以用最短路寫,顯然,也可以用拓撲排序寫 top是正宗!這裡只給出拓撲排序的做法 因為是求從1到n的最大路,所以只有1能到的點才能更新,所以需要乙個標記陣列,儲存被誰更新,被1更新過就可以去更新其他點 乙個點的最大路 max 如下 by ace...