省選模擬賽03 16 T3 超級樹

2022-06-03 10:18:09 字數 1427 閱讀 3578

目錄一棵 k-超級樹(k-supertree) 可按如下方法得到:取一棵深度為 k 的滿二叉樹,對每個節點向它的所有祖先連邊(如果這條邊不存在的話)。

例如,下面是乙個 4-超級樹:

請統計一棵 k-超級樹 中有多少條不同的簡單有向路徑,對 mod 取模。

input

一行兩整數 k, mod。

output

一行一整數表示答案。

example

input1: 2 100

output1: 9

input2: 3 1000

output2: 245

input3: 20 998244353

output3: 450500168

explain

第乙個樣例的 9 條路徑如下:

1, 2, 3, 1->2, 2->1, 1->3, 3->1, 2->1->3, 3->1->2。

神仙樹。

你問我為什麼 3/27 要寫 3/16 的模擬賽題解?

因為我熱愛文化課。

題解就少說點,我要去準備月考了。

對於某一條路徑:

要麼它完全在左右某一棵子樹中,可以轉換為子問題;

要麼它肯定經過根節點,這種情況再分成幾類:

(1)只包含根節點。easy。

(2)以根節點作為終點/起點。easy。

(3)從左子樹/右子樹到另一顆子樹。easy。

(4)從左子樹/右子樹回到這棵子樹。……

好像第 4 類不可做的樣子。我們需要求解一棵子樹含有兩條不相交路徑的方案數。

既然如此,就再加一維狀態。定義 dp(i, j) 表示深度為 i 的超級樹選出 j 條不相交路徑的方案數。

因為增加乙個根節點最多隻會將兩條路徑合併,即總路徑數減一,故 j ≤ k。

然後就是非常簡單的 o(n^3) 的 dp 題了。

最後答案為 dp(k, 1)。

#includeconst int maxn = 500 + 5;

int dp[maxn][maxn], k, mod;

inline int add(int a, int b)

inline int mul(int a, int b)

int main()

} printf("%d\n", dp[k][1]);

}//本地卡常,還沒卡過。因此僅供參考。

暴力加一維狀態的神仙操作。

寫到一半我突然明白為什麼要求是有向的路徑……路徑數變為原先的兩倍,就不用求 2 的逆元。

出題人真懶。

省選模擬賽Day4T3迂迴

problem problem problem problem problem problem problem problem 3 迂迴 tour tour tour tour tour tour 題目描述 題目描述 給定一有向圖,邊長均為 1,求 長度 小於 k的環個數 mod m 保證 有向圖中...

SNOI省選模擬賽 dat1t3 tree

題意 給定一棵n個點 n 1條邊的樹,樹上的第i條邊有權值w i q次詢問,每次詢問為下列兩種操作之一 1 增加乙個點對 x,y。2 查詢第x條邊權值為y時所有點對之間的距離的最大值。題解 還沒完全想清楚,先占個坑,最近來補。下附暫時沒有想清的ac的 include include include ...

省選模擬賽Day7 T3 隨便亂走

題意 乙個n個點的環,當你在i號點時有pi 2的概率走向 i n 1 號點,有pi 2的概率走向 i 2 n n 1 號點,有 1 pi 的概率永遠停下,動態修改pi,多次詢問從i號點出發走的距離的期望值f i 範圍n 100000 這個題就是誘導人去想高斯消元的,然後複雜度 電腦高斯消元會 那麼我...