首页 > 其他分享 >Maximum Diameter 题解

Maximum Diameter 题解

时间:2023-09-01 19:00:45浏览次数:51  
标签:Diameter int 题解 sum Maximum choose 2n include mod

Maximum Diameter

题目大意

定义长度为 \(n\) 的序列 \(a\) 的权值为:

  • 所有的 \(n\) 个点的第 \(i\) 个点的度数为 \(a_i\) 的树的直径最大值,如果不存在这样的树,其权值为 \(0\)。

给定 \(n\),求所有长度为 \(n\) 的序列的权值和。

思路分析

\(n\) 个点的树的边数为 \(n-1\),总度数为 \(2n-2\),故序列 \(a\) 的权值不为 \(0\) 当且仅当 \(\sum a=2n-2\) 且 \(a_i>0\),因此我们只需要考虑这样的序列即可。

考虑如何根据给定序列构造出直径最大的树,设 \(a\) 中有 \(k\) 个 \(1\),也就是树上有 \(k\) 个叶子节点,那么我们可以将剩下的 \(n-k\) 个节点全部串在一起,再在两端放上两个叶子节点,用 \(n-k+2\) 个点构造出一条长 \(n-k+1\) 的链,其余的叶子节点挂在链上,显然这是最优方案,直径为 \(n-k+1\)。

考虑计数。枚举 \(k\),那么叶子节点的选择方案数为 \({n \choose k}\)。而非叶子节点的度数必须大于 \(1\),且有 \(n-k\) 个,又因为剩余的可用度数为 \(2n-2-k\),所以这个问题等价于将 \(2n-2-k\) 个相同的球放在 \(n-k\) 个盒子里,且每个盒子的球必须大于 \(1\),由插板法易得其方案数为:

\[{(2n-2-k)-2(n-k)+(n-k)-1\choose (2n-2-k)-2(n-k)}={n-3\choose k-2} \]

再算上直径产生的贡献,故我们所求式即:

\[\sum_{k=1}^n{n\choose k}{n-3\choose k-2}(n-k+1) \]

这个式子可以 \(O(n)\) 计算,但这显然不够,我们需要继续化简。

我们有以下两个式子:

  • 吸收恒等式:\(k{n\choose k}=n{n-1\choose k-1}\)

  • 范德蒙德卷积:\(\sum\limits_{i=0}^k{n\choose i}{m\choose k-i}={n+m\choose k}\)

一式可以直接拆组合数简单证明,二式通过组合意义显然成立。

然后我们就可以通过以上两个式子对所求式进行化简了:

\[\begin{aligned} \sum_{k=1}^n{n\choose k}{n-3\choose k-2}(n-k+1)&= -\sum_{k=1}^n{n\choose k}{n-3\choose k-2}(k-2+1-n)\\&= -\sum_{k=1}^n{n\choose k}{n-3\choose k-2}(k-2)+(n-1)\sum_{k=1}^n{n\choose k}{n-3\choose k-2}\\&= (n-1)\sum_{k=1}^n{n\choose k}{n-3\choose k-2}-(n-3)\sum_{k=1}^n{n\choose k}{n-4\choose k-3}\\&= (n-1)\sum_{k=1}^n{n\choose k}{n-3\choose n-k-1}-\sum_{k=1}^n{n\choose k}{n-4\choose n-k-1}\\&= (n-1){2n-3\choose n-1}-(n-3){2n-4\choose n-3} \end{aligned}\]

化到这样就可以 \(O(1)\) 计算了,只需要 \(O(n)\) 预处理组合数就行了。

代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;
const int N = 2002000, L = 2000000, mod = 998244353;
#define int long long

int fac[N], inv[N];
int T, n;

int q_pow(int a, int b){
    int res = 1;
    while (b) {
        if (b & 1) res = (res * a) % mod;
        a = (a * a) % mod;
        b >>= 1;
    }
    return res;
}

int C(int n, int m){
    if(n < m || n < 0 || m < 0) return 0;
    return fac[n] * (inv[m] * inv[n - m] % mod) % mod;
}

signed main(){
    fac[0] = 1;
    for (int i = 1; i <= L; i ++) fac[i] = fac[i - 1] * i % mod;
    inv[L] = q_pow(fac[L], mod - 2);
    for (int i = L; i >= 1; i --) inv[i - 1] = inv[i] * i % mod;
    scanf("%lld", &T);
    while (T --) {
        scanf("%lld", &n);
        int res1 = (n - 1) * C(2 * n - 3, n - 1) % mod;
        int res2 = (n - 3) * C(2 * n - 4, n - 3) % mod;
        int ans = (res1 - res2 + mod) % mod;
        cout << ans << '\n';
    }
    return 0;
}

标签:Diameter,int,题解,sum,Maximum,choose,2n,include,mod
From: https://www.cnblogs.com/TKXZ133/p/17672694.html

相关文章

  • 【题解】Harbour.Space Scholarship Contest 2023-2024 D,E,F(CF1864)
    D.MatrixCascade题目描述:有一个大小为\(n\timesn\)的矩阵,由0和1组成。行的编号从上到下依次为\(1\)到\(n\),列的编号从左到右依次为\(1\)到\(n\)。第\(x\)行与第\(y\)列交叉处的单元格记为\((x,y)\)。水月想把矩阵的所有元素都变成0。她可以一步完成以下操作:选择任意......
  • kde桌面“屏幕边缘”无法触发问题解决
    鼠标放到屏幕边缘无法触发效果,搜索后是设置问题。解决办法:系统设置——硬件——显卡与显示器——显示特效合成器,勾选允许应用阻止显示特效合成,然后右下角点击应用参考:https://www.cnblogs.com/pipci/p/14870650.html......
  • CF1864D 题解
    CF1864DMatrixCascade题解Links洛谷CodeforcesDescription给定一个\(n\timesn\)的01矩阵。定义一次操作为:选择矩阵上第\(i\)行第\(j\)列的格子\((i,j)\),将其取反,并取反所有满足\(x>i,x-i\ge|y-j|\)的位置\((x,y)\)。其中,“取反”的意思为:把\(0\)......
  • CF1712F Triameter 题解
    Description你有一棵有\(n\)个点的树,树上的每条边权值都为\(1\)。现在有\(q\)次询问,每次询问一个整数\(x\),并将叶子结点全部相连上权值为\(x\)的边(操作不会保留)。问每次操作后图的直径是多少。图的直径定义为\(\underset{1\lequ<v\leqn}{\max}d(u,v)\)。\(3\leqn\le......
  • springcloud 跨域问题解决
    问题原因跨域本质是浏览器基于同源策略的一种安全手段同源策略(Sameoriginpolicy),是一种约定,它是浏览器最核心也最基本的安全功能所谓同源(即指在同一个域)具有以下三个相同点协议相同(protocol)主机相同(host)端口相同(port)反之非同源请求,也就是协议、端口、主机其中一项不相同的......
  • MySQL 使用Navicat delete/insert into/update 大量数据表锁死,kill的线程后线程处于ki
      MySQL使用delete/insertinto/update大量数据表锁死,kill的线程后线程处于killed状态问题解决实际生产环境问题描述:使用Navicat备份BigData数据表时不小心点到了取消按钮,导致数据表被锁。  查看MySQL线程队列,找到刚刚执行的SQL看是属于什么状态。showprocessli......
  • 选博士 题解
    FZQOJLuogu前言​ 节假日在家闲来无事,那就水写一篇题解吧。题目描述​ 前面一大堆废话,总结来说就是:​ 求l--R区间的和​ 但是每一个数转换为它本身所有数位的和,重复这个操作,直到这个数⩽9思路​ 我不知道各位神犇们是怎么做的,所以在此分享一下我的思路前缀......
  • 「USACO3.2」Magic Squarest题解
    「USACO3.2」MagicSquarest题解建议优先阅读题目后再看题解:FZQOJluogu-题目大意给定初始二维数组(也即是题中所说的魔板):12348765并提供以下3种操作:\(A\).交换上下两行;\(B\).将最右边的一行移动到最左边;\(C\).顺时针旋转魔板的中央4个数字询问最少多少次......
  • [USACO05DEC] Layout G 题解
    fzqojluogu题意分别给出\(ml\)和\(md\)对,关于n头奶牛位置的关系,求1号到n号奶牛的最大距离是多少每一对ml的关系转化成不等式就是:\(A-B\leC\)相应的,每一对md的关系转化成不等式就是:\(A-B\geqC\)(\(A\),\(B\)是两头奶牛的位置,\(C\)是他们相差的距离)思路看到多元的......
  • CF1864D Matrix Cascade 题解
    首先把式子拆一下,可以知道\(x-i\ge|y-j|\)等价于\(x-y\gei-j\)和\(x+y\gei+j\),注意到每次操作\((i,j)\),影响到的点\((x,y)\)均要满足\(x>i\),那么我们每次就必须要按照从上往下的顺序进行,否则上面的点无法影响到,即从第一行开始操作。又注意到对于\((i,j)\)如果执......