CTSC2011 幸福路徑

2022-05-10 21:45:07 字數 1678 閱讀 7367

有向圖 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值的最大可能值,四捨五入到小數點後一位。

輸入樣例#1: 複製

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

輸出樣例#1: 複製

18.0

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

因為保留一位小數,且w(i)<=100

所以當$p^k$<1e-4時可無視

也就是說,當邊數大於k時就可以忽略不計

k最大為:

$log_1e-4$約等於$10^7$

所以用倍增floyd求最大值

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7double f[26][101][101],w[101],inf=2e18,p,ans;

8int

n,m,s;

9int

main()

10 16 cin>>s;

17for (i=0;i<=25;i++)

18for (j=1;j<=n;j++)

19for (k=1;k<=n;k++)

20 f[i][j][k]=-inf;

21for (i=1;i<=n;i++)

22 f[0][i][i]=0

;23 scanf("

%lf",&p);

24for (i=1;i<=m;i++)

2529

for (t=1;t<=25;t++)

3039

}40 p=p*p;41}

42 ans=-inf;

43for (i=1;i<=n;i++)

44 ans=max(ans,f[25][s][i]+w[s]);

45 printf("

%.1lf\n

",ans);

46 }

CTSC2011 幸福路徑

給定 張有向圖,每個點有個權值,螞蟻從某個點開始,初始體 為1,每經過 條邊,體 會變為原來的p 0 n leq 100,點權 leq 100 sol 正解是自動機的幫浦引理,一看就不可做,考慮暴力碾標算 由於點權不超過 100,體力很小的時候點權的貢獻也很小,保留一位小數就會把很小的貢獻捨去 做乙...

bzoj 2306 Ctsc2011 幸福路徑

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

bzoj2306 Ctsc2011 幸福路徑

有向圖 g有n個頂點 1,2,n,點i 的權值為 w i 現在有乙隻螞蟻,從給定的起點 v0出發,沿著圖 g 的邊爬行。開始時,它的體力為 1。每爬過一條邊,它的體力都會下降為原來的 倍,其中 是乙個給定的小於1的正常數。而螞蟻爬到某個頂點時的幸福度,是它當時的體力與該點權值的乘積。我們把螞蟻在爬行...