日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

luoguP4206 [NOI2005]聪聪与可可 期望概率DP

發(fā)布時(shí)間:2024/4/15 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 luoguP4206 [NOI2005]聪聪与可可 期望概率DP 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

首先,分析一下這個(gè)貓和鼠

貓每局都可以追老鼠一步或者兩步,但是除了最后的一步,肯定走兩步快些....

既然貓走的步數(shù)總是比老鼠多,那么它們的距離在逐漸縮小(如果這題只能走一步反而不能做了...)

貓不知道老鼠下一步走哪里,貓走的時(shí)候依據(jù)的是老鼠當(dāng)前的位置

?

明顯,貓走的位置沒有什么規(guī)律可言(即使有規(guī)律還是會(huì)預(yù)處理啊.....)

我們可以在$O(n^2 + nm)$的復(fù)雜度內(nèi)預(yù)處理出$s(i, j)$表示貓?jiān)?i$,老鼠在$j$時(shí),貓下一步的位置...

?

直接設(shè)$f(i, j)$表示貓?jiān)?i$,老鼠在$j$時(shí)貓吃到老鼠的期望步數(shù)

那么有$f(i, i) = 0$

并且$f(i, s(i, j)) = 1,f(i, s(s(i, j), j)) = 1 (i \neq j)$

其余情況下$f(i, j) = \sum\limits_{v = j | e(j, v)} \frac{f(s(s(i, j), j), v) + 1}{du[j] + 1}$

由于貓鼠距離減小,因此轉(zhuǎn)移具有拓?fù)湫?/p>

可以根據(jù)貓鼠距離排序轉(zhuǎn)移,也可以直接$dfs$

由于$dfs$好寫,因此這里選擇$dfs$

復(fù)雜度$O(n^2 + nm)$

#include <cstdio> #include <iostream> using namespace std;extern inline char gc() {static char RR[23456], *S = RR + 23333, *T = RR + 23333;if(S == T) fread(RR, 1, 23333, stdin), S = RR;return *S ++; } inline int read() {int p = 0, w = 1; char c = gc();while(c > '9' || c < '0') { if(c == '-') w = -1; c = gc(); }while(c >= '0' && c <= '9') p = p * 10 + c - '0', c = gc();return p * w; }#define de double #define sid 1005 #define eid 5005 #define ri register intint n, m, s, t, cnp; int cap[eid], nxt[eid], node[eid], q[eid]; int du[sid], dis[sid][sid], nx[sid][sid]; de f[sid][sid];void adeg(int u, int v) {du[u] ++;nxt[++ cnp] = cap[u]; cap[u] = cnp; node[cnp] = v; }#define cur node[i] void Pre() {for(ri u = 1; u <= n; u ++) {int fr = 1, to = 0;q[++ to] = u; dis[u][u] = 0;while(fr <= to) {int o = q[fr ++];for(ri i = cap[o]; i; i = nxt[i])if(dis[u][cur] == 1e5)dis[u][cur] = dis[u][o] + 1, q[++ to] = cur;}}for(ri u = 1; u <= n; u ++)for(ri v = 1; v <= n; v ++) {int w = 1e5;for(ri i = cap[u]; i; i = nxt[i])if(dis[cur][v] < w || (dis[cur][v] == w && nx[u][v] > cur))nx[u][v] = cur, w = dis[cur][v];} }de dfs(int a, int b) {if(f[a][b] != -1) return f[a][b];if(a == b) return f[a][b] = 0;int to = nx[a][b], toto = nx[to][b];if(to == b || toto == b) return f[a][b] = 1;f[a][b] = 0;for(int i = cap[b]; i; i = nxt[i])f[a][b] += (dfs(toto, cur) + 1) / (de)(du[b] + 1);f[a][b] += (dfs(toto, b) + 1) / (de)(du[b] + 1);return f[a][b]; }int main() {n = read(); m = read();s = read(); t = read();for(ri i = 1; i <= m; i ++) {int u = read(), v = read();adeg(u, v); adeg(v, u);}for(ri i = 1; i <= n; i ++)for(ri j = 1; j <= n; j ++)dis[i][j] = 1e5, f[i][j] = -1;Pre();printf("%.3lf\n", dfs(s, t));return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/reverymoon/p/9513915.html

總結(jié)

以上是生活随笔為你收集整理的luoguP4206 [NOI2005]聪聪与可可 期望概率DP的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。