BZOJ2878 Noi2012 迷失遊樂園

2021-08-07 10:03:28 字數 2609 閱讀 5819

樹形dp

orz orz orz orz

orz tunix orz

orz orz orz orz

簡單寫一下,怕自己忘了。。。

先考慮沒有環的情況。

令點1為樹根,設do

wn[i

] 表示從i開始向下走的期望步數,up

[i] 表示往上走的。do

wn[i

] 的計算很簡單: do

wn[i

]=∑(

down

[j]+

w[i]

[j])

son[

i]考慮up

[i] ,點i走到父親f後,可以順著其他的兒子向下走,也可以繼續往上。所以: up

[i]=

len[

i][f

]+do

wn[f

]∗so

n[f]

−dow

n[i]

−len

[f][

i]+u

p[f]

son[

f]−1

+1最後,以每個點為出發點統計答案: an

s=∑n

i=1d

own[

i]∗s

on[i

]+up

[i]s

on[i

]+1n

考慮環呢?注意最多只有乙個環。

不在環上的點一樣算,環上的down也一樣算。

環上的點的up值其實就是沿著環走到其他的任意乙個環上的點,然後再沿外向樹向下走的期望長度。

這一段直接看**吧。

for(int i=1;i<=tot;i++)

k=1;

for(int x=pre[now];x!=now;x=pre[x])

up[now]/=2;

}

兩個並列的迴圈分別是順時針、逆時針,最後/2。k是走到這個點的概率,每次乘以1s

on[x

]+1 .

另外環上的點算是有兩個父親,於是定義pa

[i] 表示i的父親個數,則up

[i] 的式子化為: up

[i]=

len[

i][f

]+do

wn[f

]∗so

n[f]

−dow

n[i]

−len

[f][

i]+u

p[f]

∗fa[

i]so

n[f]

−1+p

a[i]

注意除0!

code:

#include 

#include

#include

#define d(x) cout<<#x<<" = "<#define e coutconst

int n = 100005;

int n,m,flag,tot; double up[n],down[n]; bool bo[n];

int len[21][21],cir[21],id[n],pre[n],nxt[n],fa[n],son[n];

struct edge e[n*2];

int head[n], ec=0;

void add(int a,int b,int w)

void findcir(int u,int f)

findcir(v,u);

if(flag>0)

if(flag==-1) break;

}bo[u]=false;

}void dfscir(int u,int f)

} void dfsdown(int u,int f)

if(son[u]) down[u]/=son[u];

}void dfsup(int u,int f,int w)

for(int i=head[u];i;i=e[i].next)

}int main()

if(m1,0);

for(int i=head[1];i;i=e[i].next)

dfsup(e[i].to,1,e[i].w);

}else

}// for(int i=1;i<=n;i++) }

for(int i=1;i<=tot;i++)

for(int i=1;i<=tot;i++)

k=1;

for(int x=pre[now];x!=now;x=pre[x])

up[now]/=2;

}for(int j=1;j<=tot;j++)

}// for(int i=1;i<=n;i++) d(down[i]), e;

// for(int i=1;i<=n;i++) d(up[i]), e;

double ans=0;

for(int i=1;i<=n;i++) ans+=(up[i]*fa[i]+down[i]*son[i])/(fa[i]+son[i]);

printf("%.5f\n",ans/n);

}

bzoj2878 Noi2012 迷失遊樂園

題目鏈結 求基環樹上以任意點為起點的簡單路徑期望長度。啊啊啊好醜陋。右轉題解 lcf 注意特判環上最後乙個點,以及算up的時候是否是根節點。bzoj2878 include include include include include include include define ll long ...

bzoj2876 Noi2012 騎行川藏

蛋蛋非常熱衷於挑戰自我,今年暑假他準備沿川藏線騎著自行車從成都前往拉薩。川藏線的沿途有著非常美麗的風景,但在這一路上也有著很多的艱難險阻,路況變化多端,而蛋蛋的體力十分有限,因此在每天的騎行前設定好目的地 同時合理分配好自己的體力是一件非常重要的事情。由於蛋蛋裝備了一輛非常好的自行車,因此在騎行過程...

BZOJ2876 Noi2012 騎行川藏

作者部落格 蛋蛋非常熱衷於挑戰自我,今年暑假他準備沿川藏線騎著自行車從成都前往拉薩。川藏線的沿途有著非常美麗的風景,但在這一路上也有著很多的艱難險阻,路況變化多端,而蛋蛋的體力十分有限,因此在每天的騎行前設定好目的地 同時合理分配好自己的體力是一件非常重要的事情。由於蛋蛋裝備了一輛非常好的自行車,因...