U119830.公共祖先
提高+/省选-
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
给定一棵包含 n 个节点的无根树,节点编号依次为 1,2,…,n。
对于每一个节点 r,将节点 r 作为整棵树的根。
定义函数 fr(i,j) 表示在以节点 r 为根的情况下,节点 i 和节点 j 的最近公共祖先节点的编号。
对于每一个可能的根节点 r,请计算:
Sr=i=1∑nj=1∑nfr(i,j)
并依次输出:
S1,S2,…,Sn
注意,本题统计的是所有有序点对 (i,j)。也就是说:
- i<j 时需要统计;
- i>j 时需要统计;
- i=j 时也需要统计。
因此,点对 (i,j) 和点对 (j,i) 会被分别计算。
输入格式
第一行输入一个整数 n,表示树的节点数量。
接下来 n−1 行,每行输入两个整数 u,v,表示节点 u 和节点 v 之间存在一条无向边。
保证输入的图是一棵树。
输出格式
输出一行,共包含 n 个整数。
其中第 r 个整数表示以节点 r 为根时:
i=1∑nj=1∑nfr(i,j)
的值。
相邻两个整数之间用一个空格分隔。
输入输出样例
输入#1
3 1 2 2 3
输出#1
14 18 22
说明/提示
【样例解释 #1】
给定的树为:
1−2−3
当节点 1 为根时,节点 1、节点 2 和节点 3 作为最近公共祖先出现的次数分别为 5、3 和 1,因此:
S1=1×5+2×3+3×1=14
当节点 2 为根时:
S2=1×1+2×7+3×1=18
当节点 3 为根时:
S3=1×1+2×3+3×5=22
所以最终输出:
141822
【数据范围】
对于所有数据:
1≤u,v≤n≤2×105
输入保证构成一棵树。
答案保证在有符号 64 位整数范围内。
| 子任务 | 分值 | 限制 |
|---|---|---|
| 1 | 5 | n=1 |
| 2 | 10 | 1≤n≤8 |
| 3 | 15 | 1≤n≤300 |
| 4 | 15 | 1≤n≤3000,且树是一条链 |
| 5 | 15 | 1≤n≤5000 |
| 6 | 15 | 1≤n≤2×105,且树为菊花图或近似菊花图 |
| 7 | 25 | 1≤n≤2×105 |
其中:
- 树为菊花图,指存在一个中心节点与其余所有节点直接相连;
- 树为近似菊花图,指存在一个节点的度数至少为 ⌊n/2⌋。
输入解题思路,AI测评打分。不知道怎么写?