BJ模擬 隨機遊走(樹型期望DP)

2021-08-18 12:44:38 字數 1753 閱讀 2218

傳送門

題解:

好題。又是一種經典模型。

先假設沒有終止節點。 記f

i fi表示

i i

到fai' role="presentation">fai

fai的期望步數,gi

g

i表示fa

i fai

到i i

的期望步數。

我們發現:每次詢問兩點,

u' role="presentation">uu到

lca lca

的fif i,

v v

到lca' role="presentation">lca

lca的

gig

i不會失效(可以想想為什麼)。 然後處理出這兩個陣列就直接鏈查詢了。

處理就非常*****了,按照以前的套路,可以推得: fi

=deg

i+∑j

≠fai

fjf i=

degi

+∑j≠

faif

jgi=

degf

ai+∑

j≠i,

j≠fa

faif

j+gf

aig i=

degf

ai+∑

j≠i,

j≠fa

faif

j+gf

ai

。o(n)

o (n

)dp即可。

#include 

using

namespace

std;

typedef

long

long ll;

typedef

long

double ld;

const

int rlen=1

<<18|1;

inline

char nc()

inline

int rd()

while(isdigit(ch))

return i*f;

}inline

void w(ll x)

if(x<0)

while(x)

while(buf[0]) putchar(buf[buf[0]--]+'0');

}const

int n=1e5+50;

int n,src,des;

vector

edge[n];

int deg[n], sze[n], son[n], top[n], fa[n], dep[n];

ll f[n], g[n], sf[n], sg[n];

inline

void dfs(int x,int ff)

f[x]=deg[x]+sum;

}inline

void dfs2(int x,int ff)

inline

void dfs3(int x,int ff)

}inline

int lca(int x,int y) return (dep[x]>dep[y]) ? y : x;

}int main()

dfs(1,0); dfs2(1,0);

top[1]=1; dfs3(1,0);

for(int q=rd();q;q--)

}

python模擬隨機遊走

在python中,可以利用陣列操作來模擬隨機遊走。下面是乙個單一的200步隨機遊走的例子,從0開始,步長為1和 1,且以相等的概率出現。純python方式實現,使用了內建的random模組 隨機遊走 第二種方式 簡單的把隨機步長累積起來並且可以可以使用乙個陣列表示式來計算。因此,我用np.rando...

python模擬隨機遊走

在python中,可以利用陣列操作來模擬隨機遊走。下面是乙個單一的200步隨機遊走的例子,從0開始,步長為1和 1,且以相等的概率出現。純python方式實現,使用了內建的random模組 隨機遊走 第二種方式 簡單的把隨機步長累積起來並且可以可以使用乙個陣列表示式來計算。因此,我用np.rando...

BJ模擬 String(SAM LCT 主席樹)

傳送門 題意 給字串 s s 支援 1.末尾加入字元。2.查詢 l r role presentation l,r l r 中出現兩次的最長字串。題解 好題。考慮離線做法 動態插入後面的字元,更新前面 l l 的答案。當我們插入乙個字元 r role presentation r r的時候,與前面的...