BZOJ3143 遊走(高斯消元,數學期望)

2021-08-15 07:50:08 字數 2181 閱讀 5079

bzoj

首先,概率不會直接算。。。

所以來乙個逼近法算概率

這樣就可以求出每一條邊的概率

隨著走的步數的增多,答案越接近

(我卡到

5000

步可以拿

50 分)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define rg register

#define max 520

#define maxl 500000

inline

int read()

struct linee[maxl];

int h[max],cnt=2;

int n,m,op[max];

inline

void add(int u,int v);h[u]=cnt++;op[u]++;}

double v[max*max];

double f[2][max];

int main()

f[0][1]=1;

for(int st=1,nw=1,nt=0;st<=5000;++st,nw^=1,nt^=1)

sort(&v[1],&v[m+1]);

double ans=0;

for(int i=m;i;--i)

ans+=i*v[m-i+1];

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

return

0;}

這樣子算出來會有精度問題

所以就掛了

現在考慮怎麼算這個概率

顯然不能dp

那麼,看看每乙個點的概率是怎麼來的 f[

i]=∑

edge

(u,i

)f[u

]op[

u]其中,op

[u] 是

u 的出度

那麼,現在我有

n個未知數(每個的概率) 以及n

個方程(每個點的概率就是怎麼算出來的)

大力用高斯消元解一下就好了

算出來之後貪心

就沒有問題啦

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define rg register

#define max 520

#define maxl 500000

inline

int read()

struct linee[maxl];

int h[max],cnt=2;

int n,m,op[max];

inline

void add(int u,int v);h[u]=cnt++;op[u]++;}

double v[max*max];

double g[max][max];

double f[max];

void build()

void guess()

}for(int i=n;i;--i)

}int main()

build();guess();

for(int u=1;ufor(int i=h[u];i;i=e[i].next)

v[i>>1]+=f[u]/op[u];

double ans=0;

sort(&v[1],&v[m+1]);

for(int i=m;i;--i)

ans+=i*v[m-i+1];

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

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條邊進行編號,使得小...

BZOJ 3143 遊走(高斯消元)

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