CF1707D.Partial Virtual Trees
NOI/NOI+/CTSC
通过率:0%
时间限制:2.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Kawashiro Nitori is a girl who loves competitive programming. One day she found a rooted tree consisting of n vertices. The root is vertex 1. As an advanced problem setter, she quickly thought of a problem.
Kawashiro Nitori has a vertex set U=1,2,…,n. She's going to play a game with the tree and the set. In each operation, she will choose a vertex set T, where T is a partial virtual tree of U, and change U into T.
A vertex set S1 is a partial virtual tree of a vertex set S2, if S1 is a subset of S2, S1=S2, and for all pairs of vertices i and j in S1, LCA(i,j) is in S1, where LCA(x,y) denotes the lowest common ancestor of vertices x and y on the tree. Note that a vertex set can have many different partial virtual trees.
Kawashiro Nitori wants to know for each possible k, if she performs the operation exactly k times, in how many ways she can make U=1 in the end? Two ways are considered different if there exists an integer z (1≤z≤k) such that after z operations the sets U are different.
Since the answer could be very large, you need to find it modulo p. It's guaranteed that p is a prime number.
川崎二鳥是一位熱愛競賽編程的女孩。某天,她發現了一棵包含 n 個頂點的有根樹,其中根節點為頂點 1。作為一名資深的題目構造者,她迅速想到了一個問題。
川崎二鳥擁有一個頂點集合 U={1,2,…,n}。她將在這棵樹與該集合上進行一場遊戲。每次操作中,她會選擇一個頂點集合 T,其中 T 是 U 的一個部分虛樹(partial virtual tree),並把 U 更新為 T。
若頂點集合 S1 滿足以下條件,則稱其為頂點集合 S2 的一個部分虛樹:
- S1 是 S2 的子集;
- S1=S2;
- 對於任意 i,j∈S1,其最近公共祖先 LCA(i,j) 也屬於 S1。
這裡 LCA(x,y) 表示樹上頂點 x 和 y 的最近公共祖先。注意:一個頂點集合可能具有多個不同的部分虛樹。
川崎二鳥想知道:對每一個可能的 k,若她恰好執行 k 次操作,最終使得 U={1} 的方案數有多少?若存在某個整數 z(1≤z≤k),使得經過 z 次操作後所得的集合 U 不同,則認為這兩種方案不同。
由於答案可能非常大,你需要輸出其對 p 取模的結果。保證 p 是一個質數。
输入格式
The first line contains two integers n and p (2≤n≤2000, 108+7≤p≤109+9). It's guaranteed that p is a prime number.
Each of the next n−1 lines contains two integers ui, vi (1≤ui,vi≤n), representing an edge between ui and vi.
It is guaranteed that the given edges form a tree.
第一行包含两个整数 n 和 p(2≤n≤2000,108+7≤p≤109+9)。保证 p 是一个质数。
接下来的 n−1 行每行包含两个整数 ui、vi(1≤ui,vi≤n),表示 ui 与 vi 之间的一条边。
保证所给的边构成一棵树。
输出格式
The only line contains n−1 integers — the answer modulo p for k=1,2,…,n−1.
唯一的一行包含 n−1 个整数——即 k=1,2,…,n−1 时答案对 p 取模的结果。
输入输出样例
输入#1
4 998244353 1 2 2 3 1 4
输出#1
1 6 6
输入#2
7 100000007 1 2 1 3 2 4 2 5 3 6 3 7
输出#2
1 47 340 854 880 320
输入#3
8 1000000007 1 2 2 3 3 4 4 5 5 6 6 7 7 8
输出#3
1 126 1806 8400 16800 15120 5040
说明/提示
In the first test case, when k=1, the only possible way is:
- 1,2,3,4→1.
When k=2, there are 6 possible ways:
- 1,2,3,4→1,2→1;
- 1,2,3,4→1,2,3→1;
- 1,2,3,4→1,2,4→1;
- 1,2,3,4→1,3→1;
- 1,2,3,4→1,3,4→1;
- 1,2,3,4→1,4→1.
When k=3, there are 6 possible ways:
- 1,2,3,4→1,2,3→1,2→1;
- 1,2,3,4→1,2,3→1,3→1;
- 1,2,3,4→1,2,4→1,2→1;
- 1,2,3,4→1,2,4→1,4→1;
- 1,2,3,4→1,3,4→1,3→1;
- 1,2,3,4→1,3,4→1,4→1.
在第一个测试用例中,当 k=1 时,唯一可能的方式是:
- 1,2,3,4→1。
当 k=2 时,共有 6 种可能的方式:
- 1,2,3,4→1,2→1;
- 1,2,3,4→1,2,3→1;
- 1,2,3,4→1,2,4→1;
- 1,2,3,4→1,3→1;
- 1,2,3,4→1,3,4→1;
- 1,2,3,4→1,4→1。
当 k=3 时,共有 6 种可能的方式:
- 1,2,3,4→1,2,3→1,2→1;
- 1,2,3,4→1,2,3→1,3→1;
- 1,2,3,4→1,2,4→1,2→1;
- 1,2,3,4→1,2,4→1,4→1;
- 1,2,3,4→1,3,4→1,3→1;
- 1,2,3,4→1,3,4→1,4→1。
输入解题思路,AI测评打分。不知道怎么写?