單調佇列 旅行問題

2021-08-31 04:02:32 字數 1277 閱讀 2488

描述 john 打算駕駛一輛汽車周遊乙個環形公路。公路上總共有 n

車站,每站都有若干公升汽油(有的站可能油量為零),每公升油可以讓汽車行駛一千公尺。john

必須從某個車站出發,一直按順時針(或逆時針)方向走遍所有的車站,並回到起點。在一開始的時候,汽車內油量為零,john

每到乙個車站就把該站所有的油都帶上(起點站亦是如此),行駛過程中不能出現沒有油的情況。

任務:判斷以每個車站為起點能否按條件成功周遊一周。

輸入 第一行是乙個整數 n ,表示環形公路上的車站數;

接下來 n 行,每行兩個整數 pi,dipi,di,分別表示表示第 ii 號車站的存油量和第ii號車站到下一站的距離。

輸出 輸出共 n 行,如果從第 i 號車站出發,一直按順時針(或逆時針)方向行駛,能夠成功周遊一圈,則在第 iii 行輸出 tak,否則輸出

nie。

樣例輸入

53 1

1 25 2

0 15 4

樣例輸出

taknie

taknie

tak提示

對於全部資料,3≤n≤1e6,0≤pi≤2×1e9,0分析:

典型的單調佇列題,拆環為鏈,並複製一遍

將點權和邊權相減得到乙個a陣列,並對其求字首和,則乙個位置上乙個位置的字首和若大於這個位置及其後面n個位置中任意乙個字首和的話這個位置就不可行

則問題轉化為快速判斷一列數中的最小值,直接上st表

另外本題還有單調佇列做法:

**(單調佇列):

#include

using

namespace std;

typedef

long

long ll;

const

int n=

2000005

;const

int inf=

0x7ffff

;int n,m;

ll ans[n]

,pos[n]

,f[n]

,sum[n]

,p[n]

,d[n]

;deque <

int> q;

inline

void

check()

}int

main()

check()

;for

(int i=

1;i<=n;

++i)

return0;

}

旅行問題(單調佇列優化)

john 打算駕駛一輛汽車周遊乙個環形公路。公路上總共有 n 個車站,每站都有若干公升汽油 有的站可能油量為零 每公升油可以讓汽車行駛一千公尺。john 必須從某個車站出發,一直按順時針 或逆時針 方向走遍所有的車站,並回到起點。在一開始的時候,汽車內油量為零,john 每到乙個車站就把該站所有的油...

單調佇列優化DP 旅行問題

john 打算駕駛一輛汽車周遊乙個環形公路。公路上總共有 n 個車站,每站都有若干公升汽油 有的站可能油量為零 每公升油可以讓汽車行駛一千公尺。john 必須從某個車站出發,一直按順時針 或逆時針 方向走遍所有的車站,並回到起點。在一開始的時候,汽車內油量為零,john 每到乙個車站就把該站所有的油...

AcWing1088 旅行問題 單調佇列DP

題目傳送門 john 打算駕駛一輛汽車周遊乙個環形公路。公路上總共有 n 個車站,每站都有若干公升汽油 有的站可能油量為零 每公升油可以讓汽車行駛一千公尺。john 必須從某個車站出發,一直按順時針 或逆時針 方向走遍所有的車站,並回到起點。在一開始的時候,汽車內油量為零,john 每到乙個車站就把...