洛谷P6835 線形生物

2022-06-13 16:06:09 字數 1122 閱讀 5329

線形生物要從 \(1\) 號台階走到 \(n+1\) 號台階。

最開始,\(1,2,3,\ldots,n\) 號台階都有一條連向下一台階的有向邊 \(i\rightarrow i+1\)。

之後 cirno 加入了 \(m\) 條返祖邊\(u_i \rightarrow v_i (u_i \ge v_i)\),它們構成了乙個返祖圖

線形生物每步會等概率地選取當前台階的一條出邊並走向對應的台階。

當走到 \(n+1\) 號台階時,線形生物就會停止行走。

同時,cirno 會統計線性生物總共走的步數,記作 \(\delta\)。

cirno 想知道 \(e(\delta)\)(即 \(\delta\) 的數學期望)對 \(998244353\) 取模後的結果。

設 \(f[i]\) 表示從 \(i\) 走到 \(i+1\) 的期望步數,\(g[i]=sum^_f[j]\)。那麼答案即為 \(g[n]\)。

設 \(c[i]\) 表示點 \(i\) 往回走的路徑數量。那麼有

\[f[i]=\frac_(g[i]-g[to[j]-1]+1)+1}

\]把 \(g[i]\) 拆成 \(g[i-1]+f[i]\),解方程得

\[f[i]=c[i]g[i-1]+c[i]+1-\sum^_g[to[j]]

\]時間複雜度 \(o(n)\)。

#include using namespace std;

typedef long long ll;

const int n=1000010,mod=998244353;

int n,m,wycakioi,tot,head[n],cnt[n];

ll f[n],g[n];

ll fpow(ll x,int k)

struct edge

e[n];

void add(int from,int to)

int main()

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

printf("%lld",g[n]);

return 0;

}

洛谷P5049 洛谷P5022 題解 旅行

原題 資料加強版 加強版 參考你谷題解 終於調過了 又是一如既往的申必錯誤 noi plus石錘了 原題的資料允許我們 o n 2 暴力斷邊,但是加強版的資料達到了 n log n 級別,我們必須在斷邊這一環節尋求更好的解法。考慮我們進入環後在何處回溯 根據繼續走環走到的點分類 設當前已經從 b 走...

洛谷練習P2279 P1346

2020年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n 1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。由於火星上非常乾燥,經常引發火...

洛谷 P1396 營救

題目描述 咚咚咚 查水表!原來是查水表來了,現在 找這麼熱心上門的查表員啊!小明感動的熱淚盈眶,開起了門 媽媽下班回家,街坊鄰居說小明被一群陌生人強行押上了警車!媽媽豐富的經驗告訴她小明被帶到了t區,而自己在s區。該市有m條大道連線n個區,一條大道將兩個區相連線,每個大道有乙個擁擠度。小明的媽媽雖然...