首页 > 其他分享 >【题解】ABC290F Maximum Diameter

【题解】ABC290F Maximum Diameter

时间:2023-02-20 09:24:54浏览次数:38  
标签:结点 limits int 题解 sum Maximum choose ABC290F 2n

大龄选手只杀到 E,鉴定为寄。

思路

正解是高明数数,这里提供一种强行推导的方法。

首先有一个死掉的思路:原问题等价于求所有 \(n\) 个点的有标号无根树的直径之和。

如果有什么高明的数数方法可以做当然是好的,但是我不会。

所以我们考虑一个假定的度数序列所产生的直径。

结论:一个度数序列可以构造出树的充要条件是 \(\sum\limits_{i = 1}^n \operatorname{deg}(i) = 2n - 2\),可以构造出来。

对于一个和为 \(2n - 2\) 的序列,极端情况下肯定想构造出一条链。

但是因为存在度数大于等于 \(2\) 的结点,只能构造出一条以叶结点为端点的极长链,然后把剩下的叶结点挂在上面。

假设有 \(k\) 个叶结点,则极长链中包含所有非叶结点和 \(2\) 个作为端点的叶结点,一共有 \(n - k + 2\) 个结点,于是长度为 \(n - k + 1\).

根据结论,随意划分剩下的度数就行。考虑每种直径的贡献,可以插板法推出答案是:\(\sum\limits_{k = 1}^n {n \choose k} {n - 3 \choose n - k - 1} (n - k + 1)\).

有老哥用 NTT 硬草过掉了,比较震撼。

观察到 \(n - k - 1\) 和 \(n - k + 1\) 类似,考虑配凑一下:\(\sum\limits_{k = 1}^n {n \choose k} {n - 3 \choose n - k - 1} (n - k - 1) + 2 \sum\limits_{k = 1}^n {n \choose k} {n - 3 \choose n - k - 1}\).

前面的 \(n - k - 1\) 可以被组合数吸收:\((n - 3) \sum\limits_{k = 1}^n {n \choose k} {n - 4 \choose n - k - 2} + 2 \sum\limits_{k = 1}^n {n \choose k} {n - 3 \choose n - k - 1}\).

前后两项分别两个范德蒙德卷积,得到答案是 \((n - 3) {2n - 4 \choose n - 2} + 2 {2n - 3 \choose n - 1}\).

预处理一下阶乘逆元就可以 \(O(1)\) 算答案了。

代码

#include <cstdio>
using namespace std;

const int maxn = 2e6 + 5;
const int mod = 998244353;

int t, n;
int fac[maxn], invf[maxn];

void init(int lim)
{
    fac[0] = invf[0] = fac[1] = invf[1] = 1;
    for (int i = 2; i <= lim; i++) fac[i] = 1ll * fac[i - 1] * i % mod, invf[i] = 1ll * (mod - mod / i) * invf[mod % i] % mod;
    for (int i = 2; i <= lim; i++) invf[i] = 1ll * invf[i - 1] * invf[i] % mod;
}

int C(int n, int m) { return (n < m ? 0 : 1ll * fac[n] * invf[m] % mod * invf[n - m] % mod); }

int main()
{
    init(2e6);
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d", &n);
        printf("%d\n", (1ll * (n - 3) * C(2 * n - 4, n - 2) % mod + 2ll * C(2 * n - 3, n - 1) % mod) % mod);
    }
    return 0;
}

标签:结点,limits,int,题解,sum,Maximum,choose,ABC290F,2n
From: https://www.cnblogs.com/lingspace/p/abc290f.html

相关文章

  • LeetCode-45. 跳跃游戏II - 题解分析
    题目来源45.跳跃游戏II题目详情给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果......
  • CF1734E Rectangular Congruence 题解
    可能更好的阅读体验题目传送门toluogu为什么只有VP才会遇到这种简单E。题目大意给定一个质数\(n\)和长度为\(n\)的序列\(b\),要求构造一个\(n\timesn\)矩......
  • VNCTF 2023-Web&Misc 部分题解
    WebBabyGo各个路由:r.GET("/",func(c*gin.Context){userDir:="/tmp/"+cryptor.Md5String(c.ClientIP()+"VNCTF2023GoGoGo~")+"/"ses......
  • vue-跨域问题解决方案
    1.使用django-cors-headers解决跨域问题1.使用pip安装pipinstalldjango-cors-headers2.添加到setting的app中INSTALLED_APPS=( ... 'corsheaders', ...)//......
  • 【题解】P4389 付公主的背包 / Euler 变换
    思路EGF+Euler变换.(有仙人搞出来解析组合做法,但是解析组合是什么?)Euler变换处理一类无标号计数问题。对于这道题而言,无序选取若干物品,使得其体积之和为\(m\),是无标......
  • Atcoder题解:Arc156_c
    数据范围\(10^5\),但是介绍一个\(O(n\logn)\)做法。我们考虑观察样例,发现样例都很小,而且\(\text{LCS}\)的长度都是\(1\),那么我们就猜答案最多为\(1\),并尝试去构造......
  • 2023 年 CCF 春季测试赛模拟赛 - 1 题解
    T1美丽校园标准解法很容易想到:从\(1\)出发向\(t\)走的路径不容易得到,而从\(t\)向\(1\)的路径只需要每次走到当前点的父节点。因此问题转化为:求从\(t\)向根......
  • [LeetCode] 1792. Maximum Average Pass Ratio
    Thereisaschoolthathasclassesofstudentsandeachclasswillbehavingafinalexam.Youaregivena2Dintegerarray classes,where classes[i]=[pass......
  • ACwing 区间最大公约数题解 线段树(附证明)
    算进区间最大公因数单点线段树 https://www.acwing.com/problem/content/247/题目:给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:Clrd,表......
  • ABC261E 题解
    前言题目传送门!更好的阅读体验?这题另外两篇题解写的啥啊,这里提供一个非常好理解的做法。思路......