description
提督們驚奇地發現,2019 年實裝的改造非常少。
經調查,原來是改造廠的廠長於八日剋扣了其他艦娘改造的圖紙,並且在 2020 年的第乙個月利用這些圖紙進行了華麗的改造,一共有三種形態,於八日改二,於八日改二特,於八日改二丁,對空、對陸、
對潛、開幕雷、五裝備格,無所不能。鎮守府雪菜八萬鋼慘遭退役。
艦娘的結構可以看成一棵 n 個點的樹,點編號為 0 ∼ n−1。使用一張圖紙可以把樹中的某一條邊去掉,再加上一條邊,使得它依然是一棵樹。
現在,於八日想在 2020 年繼續拿走別的艦娘的圖紙對自己進行改造,她一共拿走了 k 張圖紙。她想知道,自己經過接下來的改造之後,總共會有多少種形態。兩個形態不同,表示有一條邊 (x,y) 在第一棵
樹**現,在另一棵樹中不出現。
input
第一行兩個整數 n,k,表示樹的結點數和圖紙數。
第二行 n − 1 個整數 fi 描述樹的形態,表示編號為 i 的結點父親為 fi 。
output
一行乙個整數表示答案,%998244353 輸出。
sample input
樣例輸入1:
3 10 0
樣例輸入2:
4 10 1 2
樣例輸入3:
6 10 1 2 2 0
sample output
樣例輸出1:
3樣例輸出2:
8樣例輸出3:
28data constraint
對於所有資料,滿足 1 ≤ n ≤ 50 , 0 ≤ k ≤ n。
對於 20% 的資料,k = 0。其中測試點 1,k = 0。
對於 20% 的資料 (測試點 1 ∼ 4),fi =0。
對於 30% 的資料 (測試點 1 ∼ 6),n ≤ 5。
生成樹計數?上矩陣樹定理
定義一條邊 (u,v) 的權值:若 (u,v) 在原樹中,權值為 1,否則為 x。
我們要求的就是邊權之積 ≤xk 的生成樹個數。
顯然,x0……xk的係數之和即為答案
我們可以用拉格朗日插值法解決
#include
#define ll long long
using
namespace std;
const
int n=
155,mod=
998244353
;bool bz[n]
[n];
int a[n]
[n],inv[n]
,ans,n,m,c[n]
,d[n]
,h[n]
;void
add(
int&x,
int y)
void
del(
int&x,
int y)
intmul
(int x,
int y)
intpower
(int x,
int y)
return yjy;
}int
gauss
(int n)if(
!x)continue;if
(x!=i) yjy=mod-yjy,
swap
(a[x]
,a[i]);
int inv=
power
(a[i]
[i],mod-2)
;for
(int j=i+
1; j<=n; j++)}
for(
int i=
1; i<=n; i++
) yjy=
mul(yjy,a[i]
[i])
;return yjy;
}int
calc
(int bas)
return
gauss
(n-1);
}int
main()
for(
int i=
1; i<=n; i++
)for
(int k=
0; k<=n; k++
) c[k]
=h[k];}
for(
int j=
0; j<=n; j++
)add
(d[j]
,mul
(c[j]
,y));}
for(
int i=
0; i<=m; i++
)add
(ans,d[i]);
printf
("%d\n"
,ans)
;}
JZOJ 省選模擬 string
一行乙個整數表示答案。sample input 樣例輸入 3 3sample output 樣例輸出 首先我們忽略重複的字串,定義 n 表示長度為 n 的回文串,或由兩個回文串拼成的字串數量。那麼可以通過列舉第乙個回文串的長度 可以為 0 可以算出f n 但是正如剛才所說,會對如 abaaba 這樣...
JZOJ 省選模擬 Moorio Kart
description 由於目前可供奶牛們使用的約會 並沒有給 farmer john 留下深刻印象,他決定推出乙個基於新匹配演算法的奶牛交友 該演算法可基於公牛和母牛間的共同興趣對公牛和母牛進行匹配。bessie 在尋找情人節 barn dance 的合作夥伴時,決定試用這個 在註冊賬戶之後,fj...
JZOJ 省選模擬 挖寶
description 有乙個挖寶遊戲,它在一棵 n 個點的樹上進行,寶藏埋在某個未知的點 每次挖掘乙個點 u,玩家得到的反饋資訊是乙個數值 d,表示 u 號點到 號點簡單路徑上的邊數。這個遊戲會進行 q 次,每次遊戲藏寶的位置不一定相同。你作為一名優秀的 er,對自己無比自信。你希望用最少的挖掘次...