Solution GLR R2 教材運送

2022-06-04 11:27:08 字數 3185 閱讀 2197

link.

給定一棵包含 \(n\) 個點,有點權和邊權的樹。設當前位置 \(s\)(初始時 \(s=1\)),每次在 \(n\) 個結點內隨機選擇目標結點 \(t\),付出「\(s\) 到 \(t\) 的簡單路徑上的邊權之和」\(\times\)「\(t\) 的點權」的代價,標記(可以重複標記)點 \(t\) 並把 \(s\) 置為 \(t\)。求每個點至少被標記一次時(其中 \(1\) 號結點一開始就被標記)代價之和的期望。答案對 \(998244353\) 取模。

\(n\le10^6\)。

首先,有期望意義下的 min-max 容斥的公式:

\[e(\max(s))=\sum_(-1)^e(\min(t))

\]對於本題,\(s=\\),要求的答案等價於標記最後乙個未標記點時代價的期望,那麼列舉上式中的 \(t\),並設 \(|t|=m\),我們只需要對於每個 \(t\),求出從結點 \(1\) 出發,標記 \(t\) 集合內任意乙個點的期望代價就行。

考慮乙個樸素的 dp:令 \(f_t(u)\) 表示現在在 \(u\) 點(\(u\) 點已標記)時,標記 \(t\) 內任意一點的期望代價。顯然:

\[f_t(u)=\begin0&u\in t\\

\fracn\left( \sum_^nf_t(v)+\operatorname(u,v) \right)&u\not\in t

\end

\]其中 \(\operatorname(u,v)\) 即表示題意中把 \(u\) 置為 \(v\) 的代價。到此,你就可以獲得 \(10\) 分的好成績啦!

接下來,取出乙個 \(u\not\in t\) 的 \(f_t(u)\) 來研究:

\[f_t(u)=\fracn\left( \sum_^nf_t(v)+\operatorname(u,v) \right)\\

\rightarrow nf_t(u)-\sum_^nf_t(v)=\sum_^n\operatorname(u,v)

\]令 \(s=\sum_f(v)\),\(w(u)=\sum_^n\operatorname(u,v)\),\(c=s-t=\\}\)(其中恒有 \(c_1=1\))列出共 \(|c|\) 個等式:

\[\left.

\begin

nf_t(c_1)-s=w(c_1)\\

nf_t(c_2)-s=w(c_2)\\

\cdots\\

nf_t(c_)-s=w(c_)

\end

\right\}n-m\text

\]左右分別相加得到:

\[ns-(n-m)s=\sum_w(v)\\

\rightarrow s=\fracw(v)}

\]於是乎,要求的 \(f_t(1)\) 就有:

\[f_t(c_1)=\frac

\]此後,把 \(f_t(1)\) 帶入答案的式子裡:

\[\begin

&\sum_(-1)^f_t(1)\\

=&\sum_(-1)^\left( \frac+\fracw(u)} \right)\\

=&\fracn\sum_^(-1)^\left[ \binommw(1)+\fracm\sum_\sum_w(u) \right]

\end

\]令 \(g(m)=\sum_\sum_w(v)\),單獨考慮結點 \(1\),它必然不屬於 \(t\);再考慮其他結點的貢獻次數,可以得出:

\[g(m)=\binomw(1)+\binomm\sum_^nw(u)

\]最後,只需要求出 \(\sum_^nw(u)\)。分別考慮每條邊 \((u,v,b)\in e\) 的貢獻。將這條邊刪去,記此時 \(u\) 所在聯通塊的結點個數為 \(p_u\),結點點權之和為 \(q_u\),\(v\) 同理。則:

\[\sum_^nw(u)=\sum_b(u,v)(p_uq_v+p_vq_u)

\]綜上,求出這一系列式子,問題就以 \(\mathcal o(n)\) 的複雜度解決啦!

/* clearink */

#include inline char fgc ()

inline int rint ()

const int maxn = 1e6, mod = 998244353;

int n, ecnt, head[maxn + 5], val[maxn + 5], fac[maxn + 5], ifac[maxn + 5];

int fa[maxn + 5], siz[maxn + 5], sum[maxn + 5], dist[maxn + 5]; // dist[i]==dist(1,i).

int g[maxn + 5];

inline int mul ( const long long a, const int b )

inline int sub ( int a, const int b )

inline int add ( int a, const int b )

inline void addeq ( int& a, const int b )

struct edge graph[maxn * 2 + 5];

inline void link ( const int s, const int t, const int c ) ;

head[s] = ecnt;

}inline int qkpow ( int a, int b )

inline void init ()

inline int inv ( const int x )

inline int comb ( const int n, const int m )

inline void dfs ( const int u ) }}

int main ()

init (), dfs ( 1 );

int s = 0;

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

} }for ( int i = 2; i <= n; ++i ) addeq ( g[n - 1], mul ( val[i], dist[i] ) );

for ( int i = n - 2; i; --i )

int ans = 0;

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

printf ( "%d\n", mul ( ans, inv ( n ) ) );

return 0;

}

日常運維2

安全增強型 linux security enhanced linux 簡稱 selinux,它是乙個 linux 核心模組,也是 linux 的乙個安全子系統。enforcing 開啟狀態,會強制執行selinux的安全策略 2 permissive 提示狀態,會列印觸發selinux安全策略的警...

關於運維(2)

運維的職責覆蓋了產品從設計到發布 執行維護 變更公升級及至下線的生命週期,各個階段的職責包括 產品發布 這個階段運維工程師負責發布的具體工作,將具體的軟體和系統 硬體資源整合形成產品並對外提供服務。產品執行維護 這個階段的主要工作包括 產品效能 成本優化 產品對外提供服務最重要的一點是使用者體驗,使...

linux運維筆記2

linux 是乙個倒樹結構 linux 中所有的東西都是檔案這些檔案都在系統頂級目錄 也就是根目錄 目錄以下為二級目錄,這些目錄都是系統裝機時系統自動建立的 二級目錄及其作用 bin 二進位制可執行檔案,也就是系統命令 sbin 系統管理命令存放位置 boot 啟動分割槽,負責系統啟動 dev 裝置...