bzoj3143 Hnoi2013 遊走 期望

2022-05-31 03:54:09 字數 1115 閱讀 1620

顯而易見,要最小化總分就要讓期望經過次數最多的邊權值最小。

而邊的期望可以通過點的期望匯出。

點的期望又可以通過和它相連的點的權值匯出。

就可以列成一組方程。

再高斯消元一下就可以解出來了。

#include#include#include#includeusing namespace std;

const double eps=1e-8;

inline double max(double x,double y)

inline double abs(double x)

inline void swap(double &x,double &y)

inline bool cmp(const double &a,const double &b)

inline int read()ch=getchar();}

while(ch>='0'&&ch<='9')

return x*f;

}int n,m;

int u[250005],v[250005];

int map[505][505],du[505];

double a[505][505],res[505],val[250005];

inline void guess()

} for(i=n;i>0;i--)

}int main()

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

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

a[n-1][n]=1;

for(i=1;i<=n-2;i++) a[i][n]=(i-1)?0:(-1);

for(i=1;i<=n-1;i++) a[n-1][i]=1.0*map[n][i]/du[i];

n--;guess();

for(i=1;i<=m;i++) val[i]=1.0/du[u[i]]*res[u[i]]+1.0/du[v[i]]*res[v[i]];

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

for(i=1;i<=m;i++) ans+=val[i]*i;

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

return 0;

}

BZOJ 3143 遊走 高斯消元

中文題目。f v 表示小z在圖上游走時,在v點走的次數 這樣就可以根據圖上的鏈結關係 構造出n個方程在求解既可 include include include include using namespace std const int maxn 500 5 const double eps 1e 4...

BZOJ 3143 遊走(高斯消元)

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

bzoj3143 遊走 概率 高斯消元

題目大意是說 給出一張無向圖,找出一種加權值的方式,使得從1到n期望帶權路徑長度最短,輸出最短路長度。首先,根據基本常識,走的次數多的邊,權值越小越好 廢話 於是問題轉變為 找出每條邊的期望經過次數。設i邊期望經過次數為f i 則f i 就為兩個端點期望經過次數與走到這條邊概率之商的和 沒看懂?就是...