拓撲排序 DP 旅遊計畫

2021-09-24 01:46:15 字數 1190 閱讀 3413

luogu p1137

小明要去乙個國家旅遊。這個國家有#n個城市,編號為1到n,並且有mm條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。

所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多。

現在,你只知道每一條道路所連線的兩個城市的相對位置關係,但並不知道所有城市具體的位置。現在對於所有的i,都需要你為小明制定一條路線,並求出以城市ii為終點最多能夠遊覽多少個城市。

第1行為兩個正整數n, m。

接下來m行,每行兩個正整數x, y,表示了有一條連線城市x與城市y的道路,保證了城市x在城市y西面。

n行,第i行包含乙個正整數,表示以第i個城市為終點最多能遊覽多少個城市。

5 6

1 21 3

2 32 4

3 42 5

123

43

均選擇從城市1出發可以得到以上答案。	

對於20%的資料,n ≤ 100;

對於60%的資料,n ≤ 1000;

對於100%的資料,n ≤ 100000,m ≤ 200000。

#include

#include

#include

using

namespace std;

int x,y,h[

100005

],r[

100005

],t,f[

100005

],n,m;

struct node

w[2000005];

void

add(

int x,

int y)

;h[x]

=t;}

void

topsort()

//初始化

while

(q.size()

)}}int

main()

topsort()

;for

(int i=

1; i<=n;

++i)

printf

("%d\n"

,f[i]);

}

簡單DP 拓撲排序 拓撲排序 DP兩練

portkey 單源單匯就是最長路 多源單匯就是反一下最長路 多源多匯就是拓撲排序 include using namespace std define in read int in const int n 2e5 5 int n,m,deg n f n vector int g n void to...

洛谷P1137 旅行計畫(拓撲排序 dp)

題目描述 小明要去乙個國家旅遊。這個國家有n個城市,編號為1 n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多...

洛谷 P1137 旅行計畫 (拓撲排序 dp)

在dag中,拓撲排序可以確定dp的順序 把圖的資訊轉化到乙個拓撲序上 注意轉移的時候要用邊轉移 這道題的dp是用刷表法 include define rep i,a,b for register int i a i b i define for i,a,b for register int i a ...