內網傳送門
由於求最短路,邊權為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行...