JZOJ 幽幽子與森林

2021-09-11 15:17:44 字數 2104 閱讀 9675

迷途竹林可以看成是乙個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被稱為資料探勘領域內里程碑...