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 級別的,於是我們考慮從這個方面入手 我們求出所有的最大獨立集,考慮求出有多少種考慮順序能夠恰好得到這個最大獨立集 設當前已...