題解 lg3232 HNOI2013 遊走

2022-03-06 13:16:10 字數 1137 閱讀 8045

給定乙個 n個點 m 條邊的無向連通圖,頂點從 1 編號到 n,邊從 1編號到 m。

小 z 在該圖上進行隨機遊走,初始時小 z 在 1號頂點,每一步小 z 以相等的概率隨機選擇當前頂點的某條邊,沿著這條邊走到下乙個頂點,獲得等於這條邊的編號的分數。當小 z 到達 n 號頂點時遊走結束,總分為所有獲得的分數之和。 現在,請你對這 m 條邊進行編號,使得小 z 獲得的總分的期望值最小。

首先,乙個較為顯然的性質, 獲得的總分的期望值 就是 每一條邊期望經過的次數 乘上 其權值

然後貪心地將小權值賦給期望次數大的邊

但邊數實際上最大會有\(125000\),會跑不過,我們此時運用技巧點邊轉換,考慮點的期望經過次數與邊的關係,得到 邊的期望經過次數 = $$f_u \frac + f_v \frac$$

其中\(deg\)為點的度數,\(u,v\)分別為一條邊的兩個端點,\(f\)為點的期望經過次數

然後考慮點,對於點n,它不會被經過,因為到它就停了,於是有以下式子

\[f_i=\sum_ \frac

\]注意,當\(i=1\)時,需特判為\(f_1=\sum_ \frac+1\),因為從1開始.

然後就發現不能遞推qaq

但是這可以轉換乙個n-1元1次方程組,於是高斯消元

#includeusing namespace std;

int n,m;

int d[510];

double a[510][510],c[510],val[125010],x[510];

double ans=0.0;

struct edgee[125010];

int main()

for(int i=1;ifor(int i=1;i<=m;i++)

c[1]=1.0;

for(int i=1;i<=n-1;i++)

} for(int i=1;i<=n-1;i++)x[i]=c[i]/a[i][i];

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

sort(val+1,val+m+1);

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

printf("%.3lf\n",ans);

return 0;

}

LG4948 題解報告

p4948 題解報告 求 sum 的值,其中 n le10 k le 2 times 10 3,a le 10 9 本題在 具體數學 一書中有詳細的解法思路說明,可以在該書第二章 和式 中得到思路的啟發。對這個式子進行擾動。令 s k sum 當 a 1 時,有 s k sum sum i 1 k ...

題解 lg2605 基站選址

題面 設 f i,j 表示前 i 個村莊建立 j 個基站,且第 i 個村莊有基站的最小花費 則有 f i,j min 其中 cost k,i 表示第 i k 個村莊建有基站,中間沒有,所需要補償的費用 發現轉移式中從 j 1 j 我們可以脫去 j 這一維 考慮怎麼計算 cost k,i k i 如果...

題解 lg2034 選擇數字

給定一行n個非負整數a 1 a n 現在你可以選擇其中若干個數,但不能有超過k個連續的數字被選擇。你的任務是使得選出的數字的和最大。設 f i,0 表示考慮到數字 i 並選擇 i 的最大和,f i,1 表示考慮到數字 i 並選擇 i 的最大和 那麼 f i,0 min f i 1,0 f i 1,1...