描述
在上一回和上上回里我們知道nettle在玩《艦これ》,nettle在整理好艦隊之後終於準備出海撈船和敵軍交戰了。
在這個遊戲裡面,海域是n個戰略點(編號1..n)組成,如下圖所示
其中紅色的點表示有敵人駐紮,貓頭像的的點表示該地圖敵軍主力艦隊(boss)的駐紮點,虛線表示各個戰略點之間的航線(無向邊)。
在遊戲中要從乙個戰略點到相鄰戰略點需要滿足一定的條件,即需要艦隊的索敵值大於等於這兩點之間航線的索敵值需求。
由於提高索敵值需要將攻擊機、轟炸機換成偵察機,艦隊索敵值越高,也就意味著艦隊的戰力越低。
另外在每乙個戰略點會發生一次戰鬥,需要消耗1/k的燃料和子彈。必須在燃料和子彈未用完的情況下進入boss點才能與boss進行戰鬥,所以艦隊最多只能走過k條航路。
現在nettle想要以最高的戰力來進攻boss點,所以他希望能夠找出一條從起始點(編號為1的點)到boss點的航路,使得艦隊需要達到的索敵值最低,並且有剩餘的燃料和子彈。
特別說明:兩個戰略點之間可能不止一條航線,兩個相鄰戰略點之間可能不止一條航線。保證至少存在一條路徑能在燃料子彈用完前到達boss點。
輸入 第1行:4個整數n,m,k,t。n表示戰略點數量,m表示航線數量,k表示最多能經過的航路,t表示boss點編號, 1≤n,k≤10,000, n≤m≤100,000
第2..m+1行:3個整數u,v,w,表示戰略點u,v之間存在航路,w表示該航路需求的索敵值,1≤w≤1,000,000。
輸出 第1行:乙個整數,表示艦隊需要的最小索敵值。
樣例輸入
5 6 2 5
1 2 3
1 3 2
1 4 4
2 5 2
3 5 5
4 5 3
樣例輸出
3思路:
就二分mid 看能否滿足條件。複習一下vector模擬鄰接表與bfs遍歷。
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 1e5+5;
struct edge
;vector
edge[maxn];
int vis[maxn];
int n,m,k,t;
bool judge(int x)}}
return
false;
}int search(int low, int high)
return low;
}int main()
int res = search(1,1e9);
cout
<< res
0;}
hiho 1139 二分 bfs搜尋
題目 實現 include include include include include include include include include include include includeusing namespace std struct edge 邊的個數,開始的時候陣列開的長度為...
每日一題之 hiho1744 hohahola
描述 有一種叫作hohahola的飲料,售價是x元一瓶。小hi非常喜歡這種飲料,但是他現在身無分文。不過小hi有n張優惠券,買hohahola時每瓶最多使用一張優惠券,可以使該瓶 減少y元。y x 同時優惠券可以 小hi每 一張優惠券可以獲得z元。請你幫小hi計算通過 若干優惠券,他最多可以買多少瓶...
每日一題之 hiho1304 24點
週末,小hi和小ho都在家待著。在收拾完房間時,小ho偶然發現了一副撲克,於是兩人考慮用這副撲克來打發時間。小ho 玩點什麼好呢?小hi 兩個人啊,不如來玩24點怎麼樣,不靠運氣就靠實力的遊戲。小ho 好啊,好啊。經過若干局遊戲之後 小ho 小hi,你說如果要寫個程式來玩24點會不會很複雜啊?小hi...