目錄一棵 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 這個題就是誘導人去想高斯消元的,然後複雜度 電腦高斯消元會 那麼我...