在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量
有一天他醒來後發現自己居然到了聯盟的主城暴風城
在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪
在艾澤拉斯,有n個城市。編號為1,2,3,...,n。
城市之間有m條雙向的公路,連線著兩個城市,從某個城市到另乙個城市,會遭到聯盟的攻擊,進而損失一定的血量。
每次經過乙個城市,都會被收取一定的過路費(包括起點和終點)。路上並沒有收費站。
假設1為暴風城,n為奧格瑞瑪,而他的血量最多為b,出發時他的血量是滿的。
歪嘴哦不希望花很多錢,他想知道,在可以到達奧格瑞瑪的情況下,他所經過的所有城市中最多的一次收取的費用的最小值是多少。
第一行3個正整數,n,m,b。分別表示有n個城市,m條公路,歪嘴哦的血量為b。
接下來有n行,每行1個正整數,fi。表示經過城市i,需要交費fi元。
再接下來有m行,每行3個正整數,ai,bi,ci(1<=ai,bi<=n)。表示城市ai和城市bi之間有一條公路,如果從城市ai到城市bi,或者從城市bi到城市ai,會損失ci的血量。
僅乙個整數,表示歪嘴哦交費最多的一次的最小值。
如果他無法到達奧格瑞瑪,輸出afk。
這個題極其的……
他所經過的所有城市中最多的一次收取的費用的最小值是多少:翻譯如下:
他可能有多條路徑能夠回城,那麼求的就是這些路徑中的每一條路徑 經過的城市中收費最多的數字,現在要求這個數字最小可以是多少
至於在路上他的血夠不夠,我們可以將路上失去的血量視為路徑的長度,然後使用dijkstra來判斷他的血夠不夠回城
接下來的問題就是尋找最小值的問題了
具體的思路就是我們設定乙個花費最大值變數cost,它必須是一條可行路徑上費用最大的值,該路徑上節點的費用必須比它小
在使用dijkstra判斷血夠不夠的同時來判斷該路徑上有沒有節點的費用比cost大,有的話說明我們自己設得這個cost值偏大,於是把cost改小一點繼續。
這樣一來初步得思路就是我們讓cost從1遍歷到所有節點費用的最大值,一旦不存在節點的費用比cost大,那麼此時的cost就是多條可行路徑中經過城市中收費最多的數字裡最小的乙個,也就是最終的答案
但是cost從1遍歷到所有節點費用的最大值,每遍都要執行一次dijkstra,可能會超時,所以我們使用二分搜尋,來加快cost的確定速度
#include#include#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define maxn 10001
#define maxm 50001
using
namespace
std;
struct
edge
e[maxm*2
];struct
node
};int
n, m, b;
int bb[maxn], cc[maxn], head[maxn], dis[maxn], vis[maxn], cnt = 0
;void addedge(int u, int v, int
w)int check(int
cost)
);
while (!q.empty())
); }}
}if (dis[n] <= b)return
1;//
當該條路徑完畢後,看看需要的最小血量與人擁有的血量大小關係,判斷能不能活著回去
else
return0;
}int
main()
sort(cc + 1, cc + n + 1);//
二分要排序
for (int i = 0; i < m; i++)
int l = 1, r =n, mid;
int ans = -1
;
while (l <=r)
else l = mid + 1
; }
if (ans == -1)printf("
afk\n");
else printf("
%lld
", ans);
}
P1462 通往奧格瑞瑪的道路
在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量 有一天他醒來後發現自己居然到了聯盟的主城暴風城 在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著兩個城市,從某個城市到另乙個城市,會遭到聯盟的攻擊,進...
P1462 通往奧格瑞瑪的道路
單調性 對於要求的所經過的所有城市中最多的一次收取的費用的最小值越小,滿足條件的道路就越少。所以,我們二分經過的所有城市中收取的費用的最大值 但check函式怎麼寫呢?我們以經過的邊所扣的血量為邊權,1為源點跑一邊最短路。在最短路過程中用於鬆弛dis陣列的邊的終點的點權必須 如果跑出的 includ...
P1462 通往奧格瑞瑪的道路
題目背景 在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量 有一天他醒來後發現自己居然到了聯盟的主城暴風城 在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪 題目描述 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著兩個城市,從某個城市到另乙個城市,...