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

2021-10-09 04:43:36 字數 956 閱讀 1720

題目大意

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