NOI模擬 最短路

2021-09-28 11:31:59 字數 3146 閱讀 7138

內網傳送門

由於求最短路,邊權為1

11,那麼考慮在bfs

bfsbf

s樹上dpdp

dp,類似於模擬bfs

bfsbf

s樹的生成過程。用f[i

][j]

f[i][j]

f[i][j

]表示當前的bfs

bfsbf

s樹上一共有i

ii個點,最後一層有j

jj個點的狀態的概率(i

ii中包含了j

jj),這裡最後一層是指只考慮到對應的層,後面的連邊還不確定。dep

[i][

j]

dep[i][j]

dep[i]

[j]代表這樣狀態的期望深度。我們現在假設選中某乙個確定的點,也就是說它的標號確定。因為除了一號點的期望是0,其它點的期望是相同的,那麼我們最後給這個點的期望乘上n−1

n\frac

nn−1

​就是答案了。

考慮從f[i

][j]

f[i][j]

f[i][j

]轉移,列舉下一層有幾個點,假設有k

kk個點。在維護bfs

bfsbf

s樹時,有哪些限制條件?

①這k

kk個點的每個點和最後一層的j

jj個點至少有一條連邊,不然bfs

bfsbf

s不到它。

②除去bfs

bfsbf

s樹上的i

ii個點以及這k

kk個點,剩下的所有點和bfs

bfsbf

s樹上的這i

ii個點不能有連邊,不然就會bfs

bfsbf

s到這些剩下的點,導致bfs

bfsbf

s樹最後一層不止k

kk個點。

③給這k

kk個點分配標號時,從n−i

−1

n-i-1

n−i−

1個點中選k

kk個出來,減一是因為那個確定的點。

那麼有:f[i

+k][

k]=①

∗②∗③

∗f[i

][j]

f[i+k][k]=①*②*③*f[i][j]

f[i+k]

[k]=

①∗②∗

③∗f[

i][j

]由於這一步期望深度=(上一步的期望深度+轉移貢獻)×這個轉移的概率。

於是有:

d ep

[i+k

][k]

=(de

p[i]

[j]+

f[i]

[j]∗

1)∗①

∗②∗③

dep[i+k][k]=(dep[i][j]+f[i][j]*1)*①*②*③

dep[i+

k][k

]=(d

ep[i

][j]

+f[i

][j]

∗1)∗

①∗②∗

③①,②,③可以預處理出來。

然後怎麼統計答案呢,考慮f[i

][j]

f[i][j]

f[i][j

]的貢獻:

①令最後一層的j

jj個點和選定點連通的概率為p

pp,那麼貢獻就是:p∗(

dep[

i][j

]+f[

i][j

]∗1)

p*(dep[i][j]+f[i][j]*1)

p∗(dep

[i][

j]+f

[i][

j]∗1

)②從這個地方開始,後面就不連通了,令最後一層的j

jj個點和剩下的n−i

n-in−

i個點都不聯通概率為q

qq,那麼貢獻就是:f[i

][j]

∗q∗i

nf

f[i][j]*q*inf

f[i][j

]∗q∗

inf。

為什麼是和n−i

n-in−

i個點不連通,而不是和選定點不連通?因為f

ff並沒有把後面的狀態確定下來,所以現在是強制把後面斷掉,bfs

bfsbf

s樹就確定了。不然會算重的。

#include

#define cs const

#define re register

cs int n=

4e2+

10,mod=

998244353

,oo=

1e9;

int f[n]

[n],dep[n]

[n],plink[n]

[n],pcut[n]

[n],n,p;

int fac[n]

,ifac[n]

,ans=0;

inline

intadd

(int x,

int y)

inline

intdec

(int x,

int y)

inline

intmul

(int x,

int y)

inline

void

inc(

int&x,

int y)

inline

intquickpow

(int a,

int b,

int ret=1)

inline

void

prework()

inline

intc

(int n,

int m)

intmain()

}}for(

int i=

1;i<=n-1;

++i)

}printf

("%d\n"

,mul

(mul

(ans,n-1)

,quickpow(10

,6*n*n)))

;}

10 12模擬賽 旅程 最短路

神即將帶領一些人去他們的孤寂之境,由於這個世界的不穩定,地點之間的有向道路會不定期地毀壞,出於工作準備,神想知道在某些道路毀壞之後某兩點之間的最短路。就是給定乙個有向圖,現有兩個操作,操作 1 是刪除一條邊 一條邊可重複刪除 操作 2是詢問兩個點之間的最短路。第 1 行兩個正整數 n,m,分別表示圖...

GDOI2013模擬1 最短路

這題就是個暴力spfa。我們就從節點1開始更新,每次更新一圈。我們可以發現,每個完全子圖暴力掃過以後就不需要再掃了 因為不會再優 所以就可以過了 判一判是否掃過就可以了 這題有個重構圖的解法。就是對於每個完全子圖構建成乙個菊花圖,而邊權便是1 2,然後跑一遍spfa就可以了。include incl...

最短路 最短路徑問題

題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 共有n m 3行,其中 第一行為乙個整數n。第2行...