NOI2012 迷失遊樂園

2022-05-15 06:10:00 字數 3240 閱讀 4089

比較容易的概率題。

case1~5:

這是一棵樹。

我們求出每個點i度數du[i],只走子樹的期望距離g[i]和不走子樹的期望距離f[i],這比較好求。

然後累加即可。

case6~10:

圖中有乙個環,然後環上的點都是一棵樹的根。

對於每棵樹,我們同樣求出每個點i度數du[i],只走子樹的期望距離g[i]。

那麼怎麼求不走子樹的期望距離f[i]呢?

我們先求環上的點的f[i]吧。

我們列舉環上的點i,再列舉環上的另乙個點j,求出i能到到j的距離概率和距離(有2個方向,都一樣),然後f[i]+=概率*(距離+g[j])。

現在每棵樹的根節點的不走子樹的期望距離f[i]已經算出來了,然後樹中的點f[i]也就很容易了。

然後累加即可。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//#include適用於cf,uoj,但不適用於poj

using

namespace

std;

typedef

long

long

ll;typedef

double

db;typedef pair

pii;

typedef complex

cp;#define mmst(a,v) memset(a,v,sizeof(a))

#define mmcy(a,b) memcpy(a,b,sizeof(a))

#define re(i,a,b) for(i=a;i<=b;i++)

#define red(i,a,b) for(i=a;i>=b;i--)

#define fi first

#define se second

#define m_p(a,b) make_pair(a,b)

#define sf scanf

#define pf printf

#define two(k) (1<

inline t sqr(t x)

template

inline void upmin(t &t,t tmp)

template

inline void upmax(t &t,t tmp)

const db eps=1e-9

;inline

int sgn(db x)

const db pi=acos(-1.0

);inline

void clear(vector *a,int a,int b)

inline

intgint()

for(;z!=eof && isdigit(z);res=res*10+z-'

0',z=getchar());

return (neg)?-res:res;

}inline ll gll()

for(;z!=eof && isdigit(z);res=res*10+z-'

0',z=getchar());

return (neg)?-res:res;

}const

int maxn=100000

;int

n,m;

int now,first[maxn+100

];struct tedgeedge[2*maxn+100

];db ans;

int cnt,root[maxn+100

];int id[maxn+100

];db lon[maxn+100],val[maxn+100],h[maxn+100

];inline

void addedge(int u,int v,int

dis)

int du[maxn+100],fa[maxn+100

];db g[maxn+100],f[maxn+100

];int head,tail,que[maxn+100

];inline

void bfs(int

s)

}red(j,tail,1)

}inline

void bfs2(int

s)

re(j,

1,tail)

}}int vis[maxn+100

];int top,sta[maxn+100],last[maxn+100

];inline

void

dfs()

if(v!=fa[u] &&vis[v])

}if(i==-1)vis[sta[top--]]=0

; }

}int

main()

if(m==n-1

)

ans/=db(n);

pf("%0.5lf\n

",ans);

return0;

}else

}re(i,

1,cnt)

}p=i;

gailv=1e10;

t=0.0

;

while(1

)

}h[i]/=1e10;

}mmst(fa,0);

re(i,

1,cnt)du[root[i]]+=2,f[root[i]]=h[i],bfs2(root[i]);

ans=0.0

; re(i,

1,n)

ans/=db(n);

pf("%0.5lf\n

",ans);

return0;

}return0;

}

view code

BZOJ2878 Noi2012 迷失遊樂園

樹形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 ...

bzoj2878 Noi2012 迷失遊樂園

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

CODE 遊樂園的迷宮

題目 題目描述 description 迷宮可是每個遊樂園必不可少的專案,菜菜當然是要嘗試一下啦。這個迷宮比較特殊。與其說是迷宮,倒不如說是乙個巨大的格仔。遊樂園給菜菜發了一張地圖,地圖上標明了,這個格仔由n行m列共n m個小格仔組成。有的格仔可以正常走,標為 有的格仔有陷阱不能走,標為 有的格仔比...