迷途竹林可以看成是乙個n個點的森林,幽幽子定義dis(u,v)為u到v路徑上的邊的數量,若u和v不連通則為m。她定義整個森林的危險度為
為了去拜訪永琳師匠,幽幽子需要提前知道迷途竹林的危險度。但迷途竹林的形態是時刻變化著的,所以幽幽子希望知道危險度的期望是多少。
為了避免浮點運算,答案對998244353取模。
1<=n<=2e5
這個計數寫得真的是累。
很容易想到設:
f [i
]f[i]
f[i]
表示i個點生成樹個數
g [i
]g[i]
g[i]
表示i個點生成森林計數
c [i
]c[i]
c[i]
表示i個點生成樹的距離平方和。
只要能求出這三個東西,再隨便捲捲就能搞出來答案了。
f [0
]=f[
1]=1
,f[i
]=ii
−2(i
>1)
f[0]=f[1]=1,f[i]=i^(i>1)
f[0]=f
[1]=
1,f[
i]=i
i−2(
i>1)
g =e
fg=e^f
g=ef
,一些階乘忽略掉了
copy個版還算輕鬆。
然後就是求c。
思路為距離平方和拆為中間的有序點對數*2-點的個數+1。
那麼考慮列舉這兩個有序點對,大概是三個陣列卷起來。
再列舉點,大概是兩個陣列卷起來。
然後就愉快的解決了這題。
code:
#include
#include
#include
#define ll long long
#define pp printf
#define fo(i, x, y) for(int i = x, b = y; i <= b; i ++)
#define ff(i, x, y) for(int i = x, b = y; i < b; i ++)
#define fd(i, x, y) for(int i = x, b = y; i >= b; i --)
#define pb push_back
using namespace std;
typedef vector v;
const
int n =(1
<<21)
+5;const
int mo =
998244353
;ll ksm
(ll x, ll y)
int r[n]
; ll aa[n]
;void
dft(v &b,
int f)
for(
int h =
1; h < n; h *=2
)}}if
(f ==-1
)ff(i,0
, n) b[i]
= aa[i];}
v operator *
(v a, v b)
v operator -
(v a, v b)
v qni
(v a)
b.resize
(a.size()
);return b;
}v qd
(v a)
v jf
(v a)
v ln
(v a)
v exp
(v a)
b.resize
(a.size()
);return b;
}int t, n, m;
ll fac[n]
, nf[n]
, f[n]
;int n0;
v a, b;
ll c[n]
, d[n]
, ans1[n]
, ans2[n]
;ll ni2;
intmain()
}
JZOJ6096 森林 倍增 貪心
n 200000 這道題專門坑那些資料結構學傻的老年選手 比如我 先考慮如何變換能得到最大的答案。容易發現我們的最終答案一定形如左圖,像右圖那樣選兩段不相交的一定是不優的。更進一步,我們可以發現左邊的三叉中的兩叉一定構成了原樹的直徑 有可能往上叉 我們對於每一次加入新點,判斷能否換掉直徑的乙個端點,...
Bagging與隨機森林
給定包含 m 個樣本的資料集 d,我們對它進行取樣產生資料集 d 每次隨機從 d 中挑選乙個樣本,將其拷貝放入 d 然後再將該樣本放回初始資料集 d 中,使得該樣本在下次取樣時仍有可能被採到 這個過程重複執行 m次後,我們就得到了包含 m 個樣本的資料集 d 這就是自助取樣的結果。顯然,d 中有一部...
CART與隨機森林
一 前言 分類與回歸樹 classification and regression trees,cart 是由leo breiman,jerome friedman,richard olshen與charles stone於1984年提出,既可用於分類也可用於回歸。cart被稱為資料探勘領域內里程碑...