題意:乙個無向連通圖,頂點從1編號到n,邊從1編號到m。小z在該圖上進行隨機遊走,初始時小z在1號頂點,每一步小z以相等的概率隨機選擇當前頂點的某條邊,沿著這條邊走到下乙個頂點,獲得等於這條邊的編號的分數。當小z 到達n號頂點時遊走結束,總分為所有獲得的分數之和。 現在,請你對這m條邊進行編號,使得小z獲得的總分的期望值最小。
思路:顯然,需要求出每條邊的期望經過次數,然後排序貪心賦值即可,但是每條邊的期望經過次數是什麼呢?
是 e(e)=e(u)/d(u) + e(v)/d(v) (u,v∈e)
所以做法就是先求出每個點的期望經過次數,還有,就是對於第n個點,它的期望在最後統計的時候要看做0,因為到了n點就不會再出來了。
1 #include2 #include3 #include4 #include5 #include6struct
edgee[500005
];10
int n,m,du[500005],go[1005][1005
];11
double a[1010][1010],p[500005
];12
bool
cmp(edge q,edge w)
15void
gauss()
29 now++;30}
31}32int
main()
45 m=tot;
46for (int i=1;i1;47
for (int i=1;i)53}
54 n--;
55 a[1][n+1]=1;56
gauss();
57for (int i=1;i<=n;i++) p[i]=a[i][n+1
];58
for (int i=1;i<=m;i++)
59 e[i].w=((double)p[e[i].u])/((double)du[e[i].u])+((double)p[e[i].v])/((double
)du[e[i].v]);
60 std::sort(e+1,e+1+m,cmp);
61double ans=0;62
for (int i=1;i<=m;i++) ans+=e[i].w*i;
63 printf("
%.3f\n
",ans);
64 }
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 遊走(高斯消元,數學期望)
bzoj 首先,概率不會直接算。所以來乙個逼近法算概率 這樣就可以求出每一條邊的概率 隨著走的步數的增多,答案越接近 我卡到 5000 步可以拿 50 分 include include include include include include include include include ...