bzoj 1415 Noi2005 聰聰和可可

2022-08-22 15:06:10 字數 1917 閱讀 9822

time limit: 10 sec  memory limit: 162 mb

[submit][status][discuss]

資料的第1行為兩個整數n和e,以空格分隔,分別表示森林中的景點數和連線相鄰景點的路的條數。 第2行包含兩個整數c和m,以空格分隔,分別表示初始時聰聰和可可所在的景點的編號。 接下來e行,每行兩個整數,第i+2行的兩個整數ai和bi表示景點ai和景點bi之間有一條路。 所有的路都是無向的,即:如果能從a走到b,就可以從b走到a。 輸入保證任何兩個景點之間不會有多於一條路直接相連,且聰聰和可可之間必有路直接或間接的相連。

輸出1個實數,四捨五入保留三位小數,表示平均多少個時間單位後聰聰會把可可吃掉。

【輸入樣例1】

4 31 4

1 22 3

3 4【輸入樣例2】

9 99 3

1 22 3

3 44 5

3 64 6

4 77 8

8 9【輸出樣例1】

1.500

【輸出樣例2】

2.167

【樣例說明1】

開始時,聰聰和可可分別在景點1和景點4。

第乙個時刻,聰聰先走,她向更靠近可可(景點4)的景點走動,走到景點2,然後走到景點3;假定忽略走路所花時間。

可可後走,有兩種可能:

第一種是走到景點3,這樣聰聰和可可到達同乙個景點,可可被吃掉,步數為1,概率為 。

第二種是停在景點4,不被吃掉。概率為 。

到第二個時刻,聰聰向更靠近可可(景點4)的景點走動,只需要走一步即和可可在同一景點。因此這種情況下聰聰會在兩步吃掉可可。

所以平均的步數是1* +2* =1.5步。

對於所有的資料,1≤n,e≤1000。

對於50%的資料,1≤n≤50。

f[i][j]表示聰聰在i點,可可在j點,聰聰吃掉可可的期望時間

#include#include#include#include#include#include#include#define nn 1011

#define mm 2011

#define inf 100000000

using namespace std;

double f[nn][nn];

int fir[nn],nxt[mm],to[mm],du[nn],dis[nn][nn],e=0;

struct node

bool operator

}zc,ne;

priority_queueq;

int read()

while(isdigit(ch))

return ans*f;

}void add(int u,int v)

void dijstra(int x) }}

double dp(int c,int k)

c=nod;

if(c==k) return f[cc][k]=1.0;

mi=inf,nod;

for(int i=fir[c];i;i=nxt[i])

if(dis[to[i]][k]

c=nod;

if(c==k) return f[cc][k]=1.0;

double ans=0;

for(int i=fir[k];i;i=nxt[i])

ans+=(dp(c,to[i])+1)*1.0/(double)(du[k]+1);

ans+=(dp(c,k)+1)*1.0/(double)(du[k]+1);

return f[cc][k]=ans;

}int main()

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

dijstra(i);

res=dp(c,k);

printf("%.3lf",res);

return 0;

}

BZOJ1415 Noi2005 聰聰和可可

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

BZOJ1415 Noi2005 聰聰和可可

portal 一張無向連通圖,貓和老鼠起始點分別位於a,b。每一步貓先行,老鼠每一步可以走連向當前點的任意一條邊,也可以不動,概率相同。貓每一步走向離老鼠最近的點,若該點有多個,選擇標號最小的乙個,若一步沒有到老鼠所在點,還可以再走一步。求貓捉到老鼠的期望步數。首先可以先預處理出陣列p x y 表示...

bzoj1415 Noi2005 聰聰和可可

傳送門 記憶化搜尋。用f i j 表示兩個人物在i和j時的期望值。然後列舉各種情況 1.重合 答案為0 2.差兩步之內 答案為1 3.差2步以上 走兩步後的f值 1 取乙個平均值就可以了。include include include include include include using na...