C. Edgy Trees Codeforces Round #548 (Div. 2) 【连通块】
题面: 传送门 题目描述: 给出有n个节点的树,整数k。题目要求找长度为k,符合规则(good序列)的“点序列”(由节点构成的序列)个数有多少?规则如下: 1.走一条出发点为a1,终点为ak的一条路(允许重复边,重复点) 2.从a1开始,通过最短路径走到a2,然后从a2通过最短路径走到a3,以此类推,直到走到终点 3.如果在上述过程中,至少经过一条“黑边”,则这个序列是good的 题目分析一: 这道题直接分析确实挺难,难在哪里呢?我们看看这个good序列要满足什么条件: 1.走一条路:这里要注意的就是可以重复点,其他没什么可以引起注意的地方 2.从a1走到a2,a2走到a3......如果这个过程经过了黑边,这个序列就是good序列: 所以刚开始我们的想法是: 找一条黑边两端的端点,然后看看包含这两个端点的序列有多少个,再减去重复的。 但是,想法很美好,情况很复杂😭,我刚开始就是这么想的。后面发现越来越不对劲,就重新看了一下题目,发现了一些重要的突破口: 1.题目的good序列是“至少”经过一条黑边,注意,这里的用词是用“至少”。 2.原题目的最后还提醒了:总共有n^k个序列,算其中good序列有多少个。 然后我就想到了:既然good序列这么难算,不如算算bad序列? bad序列规则:第一点和第二点不变,第三点:如果在上述过程中,没有经过一条“黑边”,则这个序列是bad的。也就是说