PKUWC2018 隨機遊走

2022-02-05 10:10:06 字數 1439 閱讀 3307

loj #2542. 「pkuwc 2018」隨機遊走(最值反演 + 樹上期望dp)

其實不是很難啦

min-max容斥既視感

設f[x]表示從x走到s中第乙個點的期望步數

f[x]=1/d[x]*(f[fa[x]])+∑1/d[x]*(f[ch[x]])+1

這個有環

利用f[x]=a*f[fa[x]]+b的套路代換

得到a,b的遞推式

對於x=rt,f[fa[x]]=0,所以f[x]=bx了

對於葉子,結果恰好也是a=1,b=1

可以2^n列舉s,再o(nlogn)log有逆元,得到答案

對於q,直接2^n列舉子集

o((nlogn+q)*2^n))

因為2^n跑不滿,可以過。

或者,預處理答案,o(1)回答

o((nlogn)+3^n+q))

**(法一):

#include#define il inline

#define reg register int

#define numb (ch^'0')

using

namespace

std;

typedef

long

long

ll;il

void rd(int &x)

namespace

miracle

return

ret;

}int

a[n],b[n];

int ans[1

<<18

];int sz[1

<<18

];int

s;int

d[n];

struct

nodee[

2*n];

inthd[n],cnt;

void add(int x,int

y)void dfs(int x,int

fa)

int sb=0,sa=0

;

int son=0

;

for(reg i=hd[x];i;i=e[i].nxt)

if(son)

else

}int

main()

for(s=1;s<(1

intk;

while(q--)

ll op=0

;

for(int tmp=s;tmp;tmp=s&(tmp-1

))else

}printf(

"%lld\n

",op);

}return0;

}}signed main()

/*author: *miracle*

date: 2019/1/20 21:36:25

*/

PKUWC2018 隨機遊走

題目需要求訪問完所有點 假設有 n 個 的期望步數,也就是要求 e max 這裡 x 1 x 2 cdots x n 表示第一次到達對應編號的關鍵點的時間。根據min max容斥,有 e max e max e left sum 1 min right sum 1 e min s ne phi 最後...

PKUWC2018 隨機演算法

題意 給定乙個圖 n 20 定義乙個求最大獨立集的隨機化演算法 產生乙個排列,依次加入,能加入就加入 求得到最大獨立集的概率 本質就是計數題 每個點有三種狀態 考慮過且在獨立集中,考慮過未在獨立集中,未考慮 本來在集合裡的點不能知道有哪些,而且不能加入的點的排列也不好確定。乙個好的方法是 把考慮過的...

PKUWC2018 隨機演算法

題目 思博狀壓寫不出是不是沒救了呀 首先我們直接狀壓當前最大獨立集的大小顯然是不對的,因為我們的答案還和我們考慮的順序有關 我們發現最大獨立集的個數好像不是很多,可能是 o n 級別的,於是我們考慮從這個方面入手 我們求出所有的最大獨立集,考慮求出有多少種考慮順序能夠恰好得到這個最大獨立集 設當前已...