bzoj 1415 聰聰和可可 期望

2021-07-11 13:27:33 字數 1095 閱讀 6802

可以先預處理出當聰聰在 i 點,可可在 j 點時,聰聰下一步到達的點的編號,記為p[i,j],bfs即可。

設f[i,j]表示聰聰在 i,可可在 j 時的期望步數,w[i,j]為與i相鄰的第 j 個點編號,t[i]為 i 點的度數,則有f[

i,j]

=∑t[

i]k=

1f[p

[p[i

,j],

j],w

[j,k

]]+f

[p[p

[i,j

],j]

,j]t

[i]+

1 然後記憶化搜尋。

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 1000000000

#define n 1005

#define d double

using

namespace

std;

int n,m,siz,s,t;

int first[n],next[n*2],to[n*2];

int p[n],d[n],map[n][n],trans[n][n];

d f[n][n];

void inser(int x,int y)

void bfs(int s)

}void init()

memset(map,-1,sizeof(map));

for (int i=1;i<=n;i++) bfs(i);

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

for (int j=1;j<=n;j++) if (i^j)

for (int y,k=first[i];k;k=next[k])

if (map[trans[i][j]][j]>map[y=to[k]][j]||map[trans[i][j]][j]==map[y][j]&&yint x,int y)

int main()

BZOJ 1415 聰聰和可可 期望DP

我們可以用n次bfs預處理出 to陣列,to i j 表示聰聰從i點到j點第一步會走哪個點。那麼對於聰聰在i點,可可在j點,聰聰先走,定義dp i j 表示步數期望。那麼顯然有dp i j sigma dp p w dp p j dee j 1 1.其中p表示to to i j j w表示j點鄰接的...

bzoj1415 聰聰和可可

對於任意一對位置x,y我們可以找到聰聰的行走方案。這個可以bfs跑 然後我們用f x,y 表示聰聰在x,可可在y抓住的期望時間,於是轉移方程是 if x y f x y 0,if x走兩步能到y f x y 1,else f x y sigma f x nxtpos y nxtpos 1 d y 1...

BZOJ1415 Noi2005 聰聰和可可

資料的第1行為兩個整數n和e,以空格分隔,分別表示森林中的景點數和連線相鄰景點的路的條數。第2行包含兩個整數c和m,以空格分隔,分別表示初始時聰聰和可可所在的景點的編號。接下來e行,每行兩個整數,第i 2行的兩個整數ai和bi表示景點ai和景點bi之間有一條路。所有的路都是無向的,即 如果能從a走到...