bzoj2306 Ctsc2011 幸福路徑

2022-05-02 04:18:07 字數 1350 閱讀 8051

有向圖 g有n個頂點 1,  2, …,  n,點i 的權值為 w(i)。現在有乙隻螞蟻,從給定的起點 v0出發,沿著圖 g 的邊爬行。開始時,它的體力為 1。每爬過一條邊,它的體力都會下降為原來的 ρ 倍,其中ρ 是乙個給定的小於1的正常數。而螞蟻爬到某個頂點時的幸福度,是它當時的體力與該點權值的乘積。 我們把螞蟻在爬行路徑上幸福度的總和記為 h。很顯然,對於不同的爬行路徑,h 的值也可能不同。小 z 對 h 值的最大可能值很感興趣,你能幫助他計算嗎?注意,螞蟻爬行的路徑長度可能是無窮的。

每一行中兩個數之間用乙個空格隔開。 

輸入檔案第一行包含兩個正整數 n,  m,分別表示 g 中頂點的個數和邊的條數。 

第二行包含 n個非負實數,依次表示 n個頂點權值 w(1), w(2), …, w(n)。 

第三行包含乙個正整數 v0,表示給定的起點。 

第四行包含乙個實數 ρ,表示給定的小於 1的正常數。 

接下來 m行,每行兩個正整數 x, y,表示是g的一條有向邊。可能有自環,但不會有重邊。

僅包含乙個實數,即 h值的最大可能值,四捨五入到小數點後一位。

5 5

10.0 8.0 8.0 8.0 15.0

1 0.5

1 2

2 3

3 4

4 2

4 5

18.0

對於 100%的資料, n ≤ 100, m ≤ 1000, ρ ≤ 1 – 10^-6, w(i) ≤ 100 (i = 1, 2, …, n)。

正解:倍增+$floyd$。

注意到$p^$的取值,當$k$很大時$p^$會很小。

所以我們可以卡一下,當$p$很小時就可以直接退出了。

寫乙個倍增+$floyd$就行了,每次用鬆弛點的最大值來更新一條路。

1 #include 2

#define il inline

3#define rg register

4#define ll long long

5#define ld long double

6#define inf (1e30)78

using

namespace

std;

910 ld f[110][110],g[110][110],w[110

],p,ans;

11int

n,m,s;

1213

intmain()

30for (rg int i=1;i<=n;++i) ans=max(ans,f[s][i]);

31 printf("

%0.1lf\n

",w[s]+ans); return0;

32 }

bzoj 2306 Ctsc2011 幸福路徑

有向圖 g有n個頂點 1,2,n,點i 的權值為 w i 現在有乙隻螞蟻,從 給定的起點 v0出發,沿著圖 g 的邊爬行。開始時,它的體力為 1。每爬過一條邊,它的體力都 p,而螞蟻爬到某個頂點時的幸福度,是它當時的體力與該點權值的乘積。求最大幸福值。因為當體力很小後,對答案就沒什麼影響力,所以用乙...

BZOJ2306 幸福路徑(動態規劃,倍增)

bzoj 不要求確切的值,只需要逼近 顯然可以通過移動 步來達到逼近的效果 考慮每次的一步怎麼移動 設f i j f i j 表示走i i 步到了j role presentation j j能夠得到的最大權值 f i v ma x f i 1 u w v pi u,v g f i v max f ...

BZOJ 1919 Ctsc2010 效能優化

題目 題意 給出兩個長度為 n 的整數序列a 0.n 1 b 0.n 1 和非負整數 c 對於兩個長度為 n的整數序列,定義 運算,結果為乙個長度為 n的整數序列,例如f g h 則有h k i j k modn f i g j 求a b b b 每一位模 n 1 的值,其中有 c 個 運算,n 1...