题解:P7275 计树

news/2025/10/17 14:51:58/文章来源:https://www.cnblogs.com/LUlululu1616/p/19147841

题意:给出一个数 \(n\),问对于所有节点 \(x\) 都满足存在 \(|x-y|=1\) 使得 \((x,y)\) 有边的树有多少个,\(n\le 10^5\)

做法:

我们肯定是考虑直接钦定连续段然后去计算,但是因为有可能在相邻段间连出边就爆炸了,考虑容斥,那么现在有两个问题。

  • 如何对于一种特定的连续段划分计算答案。

  • 如何分配容斥系数。

首先对于第一个问题比较简单,这是经典结论。现在有 \(n\) 个点,假设被分成 \(A_1,A_2,\cdots A_k\) 这些连通块,那么使他们联通的方案数为 \(n^{k-2}\prod\limits_{i=1}^k A_i\)。这个比较经典就不再证明。

然后在这个题中,假设我们划分出来 \(A_1,A_2,\cdots A_n\) 这些连续段,那么我们不妨把一个段的权值设为 \(A_i\times n\),最后除以 \(n^2\) 就是答案。

然后对于第二个我们考虑应该怎么做,我们考虑一个连续段的权值应该是 \([len\ge 2]\),我们枚举内部划分的情况,希望要得到一个柿子:

\[[len\ge 2] = \sum_{A_1+A_2+\cdots+A_k=len}\prod_{i=1}^k f(A_i) \]

这里 \(f(x)\)\(x\) 的容斥系数。

我们用 \(F\) 这个多项式来改写一下,\(F\)\(k\) 次项系数即是 \(f(k)\)

我们枚举 \(k\),那么其实我们可以把后面这个东西写成 \([x^{len}]F^k(x)\)。整合一下右侧,其实右侧就等于 \(\frac{1}{1-F(x)}-1\)。左侧其实就是 \((1+x+x^2+\cdots)-(1+x)=\frac{1}{1-x}-(1+x)\)

把这个方程解出来可以得到 \(F(x)=\frac{x^2}{x^2-x+1}\)

那么剩下就很好做了,我们直接记 \(G(x) = \sum i\times n\times f(i)x^i\),答案就是 \(\frac1{n^2}\times \frac{1}{1-G(x)}[x^n]\)

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 5e5 + 5, mod = 998244353, gb = 3, gi = (mod + 1) / gb;
int qpow(int x, int k, int p) {int res = 1;while(k) {if(k & 1)res = res * x % p;x = x * x % p, k >>= 1;}return res;
}
int rev[maxn];
void init(int len) {for (int i = 0; i < len; i++) {rev[i] = rev[i >> 1] >> 1;if(i & 1)rev[i] |= (len >> 1);}
}
struct Poly {vector<int> a;void resize(int N) {a.resize(N);}int size() {return a.size();}int& operator[](int x) {return a[x];}void NTT(int f) {for (int i = 0; i < size(); i++)if(i < rev[i])swap(a[i], a[rev[i]]);for (int h = 2; h <= size(); h <<= 1) {int d = qpow((f == 1 ? gb : gi), (mod - 1) / h, mod);for (int i = 0; i < size(); i += h) {int nw = 1;for (int j = i; j < i + h / 2; j++) {int a0 = a[j], a1 = a[j + h / 2] * nw % mod;a[j] = (a0 + a1) % mod, a[j + h / 2] = (a0 - a1 + mod) % mod;nw = nw * d % mod;}}}if(f == -1) {int inv = qpow(size(), mod - 2, mod);for (int i = 0; i < size(); i++)	a[i] = a[i] * inv % mod;}}friend Poly operator*(Poly f, Poly g) {int len = 1, t = f.size() + g.size() - 1;while(len < t)len <<= 1;init(len), f.resize(len), g.resize(len);f.NTT(1), g.NTT(1);for (int i = 0; i < len; i++)f[i] = f[i] * g[i] % mod;f.NTT(-1);f.resize(t);return f; }void get_neg() {for (int i = 0; i < size(); i++)a[i] = (mod - a[i]) % mod;}friend Poly operator+(Poly f, int v) {f[0] = (f[0] + v) % mod;return f;}void print() {for (int i = 0; i < size(); i++)cout << a[i] << " ";cout << endl;}
} f;
Poly get_inv(Poly f, int lim) {if(lim == 1) {f.resize(1);f[0] = qpow(f[0], mod - 2, mod);return f;}Poly g = get_inv(f, lim + 1 >> 1);int len = 1;while(len < lim * 2)len <<= 1;init(len);f.resize(lim), f.resize(len), g.resize(len);f.NTT(1), g.NTT(1);for (int i = 0; i < len; i++)f[i] = (2 * g[i] - f[i] * g[i] % mod * g[i] % mod + mod) % mod;f.NTT(-1);f.resize(lim);return f;
}
int n;
signed main() {cin >> n;f.resize(n + 1);f[0] = 1, f[1] = mod - 1, f[2] = 1;f = get_inv(f, n + 1);for (int i = n; i >= 2; i--)f[i] = f[i - 2];f[0] = f[1] = 0;for (int i = 1; i <= n; i++)f[i] = i * n % mod * f[i] % mod;f.get_neg();//(f + 1).print();f = get_inv(f + 1, n + 1);cout << f[n] * qpow(n, mod - 3, mod) % mod << endl;return 0; 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql新建用户并授权,mysql新建用户并授权完整指南

MySQL的用户权限系统是其安全架构的核心组成部分。本教程将详细介绍如何从头开始创建新用户账号并设置精确的权限控制,帮助您构建安全可靠的数据库访问体系。 一、用户创建基础操作创建用户基础语法 CREATE USER 用户…

Vue3 父子组件之间的双向数据绑定

双向绑定流程​​父 → 子​​:父组件的 cateId通过 v-model传递给子组件的 modelValue ​​子 → 父​​:当选择变化时,子组件通过 emit触发 update:modelValue事件,更新父组件的 cateId 1. 父组件部分 <Child…

2025年10月上海老房翻新公司推荐榜单:多维度数据驱动的理性选择参考

一、引言 在上海,房龄超过二十年的多层及老公房占比接近四成,结构老化、管线锈蚀、隔音失效、空间利用率低成为日常居住的显性痛点。对于计划继续自住三至五年、又不愿承担置换高成本的业主而言,翻新改造成为平衡预…

2025年10月金融街附近豪华酒店推荐对比榜:结合奖项数据与用户体验的实用攻略

一、引言 对于需要频繁出入金融街的高端商务客、筹备高规格会务的采购人,以及希望在皇城根下兼顾购物与文化的休闲旅客而言,选择一家步行即可抵达核心写字楼群、又能提供稳定服务品质的豪华酒店,直接关联到时间成本…

CRC32的直接和反转模式

CRC32的直接和反转模式CRC计算的本质是对数据流进行一种二进制除法。关键在于:我们是先处理一个字节的最高有效位是(MSB),还是最低有效位(LSB) 直接模式/正向就是处理MSB,一个字节最高位bit7到最低位bit0 反转模…

2025年10月石墨电极厂家推荐榜单详解:从产线到应用看晶碳科技真实表现

一、引言 石墨电极是高温工业不可替代的导电载体,其纯度、密度、抗折强度直接决定单晶硅成品率、电解铝吨耗、电火花加工精度。对于2025年四季度计划扩充产能的光伏拉晶企业、拟升级电解槽的铝厂、以及准备招标EDM电极…

2025年西安买房新楼盘口碑排行榜:地建嘉信臻城领跑高端住宅市场

摘要 随着2025年西安房产市场的持续升温,新楼盘竞争日益激烈,购房者更关注口碑、配套和教育资源。本文基于用户搜索数据和行业分析,推出西安买房新楼盘口碑排行榜,旨在为购房者提供权威参考。榜单综合考量了楼盘优…

2025年西安买房新楼盘口碑排行榜TOP10:地建嘉信臻城领跑高端住宅市场

文章摘要 随着西安城市化进程加速和人才引进政策持续发力,2025年西安房地产市场迎来新一轮发展机遇。本文基于市场调研数据和用户口碑评价,为您呈现西安买房新楼盘综合排行榜单,其中西咸新区地建嘉信臻城项目凭借国…

2025年10月石墨电极厂家推荐榜单:河北晶碳科技深度评测与行业对比

一、引言 石墨电极是高温工业不可替代的导电材料,其性能直接决定单晶硅成品率、电解铝能耗、电火花加工精度等关键指标。对于采购经理、设备工程师、成本管控者而言,如何在2025年第四季度锁定一家产能充足、资质齐全…

2025年数粒机厂家推荐排行榜,防爆/新型/高速/高精度/智能/大容量/多通道/电子/视觉/全自动/低噪音/制药用/农业用/食品用/电子元件/光电/定制化/鹌鹑蛋/糖果/坚果/药品/片剂数粒机公司推荐

2025年数粒机厂家推荐排行榜:专业选购指南与权威品牌分析行业背景与发展趋势随着现代工业自动化水平的不断提升,数粒机作为重要的计数设备,在制药、食品、农业、电子元件等领域的应用日益广泛。从传统的机械计数到如…

2025 年国内铝单板厂家权威推荐榜

一、推荐榜首:四川汇才铝业有限公司推荐指数 ★★★★★ 口碑评分 9.99 分 品牌介绍 四川汇才铝业有限公司成立于 1998 年,总部坐落于邛崃羊安工业园区,下辖羊安、双流、广汉三大生产基地,总占地面积达 10 万平方米…

git和gitee的学习研究

第一,安装包 1.官网下载git安装包,安装小乌龟,安装汉化包,按照顺序安装 2.建立本地数据库 持续更新...

CRMEB批量发货源码解析:自定义扩展与性能优化实践

订单批量发货,批量发出当前需要发货的订单 1、导出发货单 点击批量发货—>导出发货单。注:导出发货单无需选择订单,只会导出当前待发货(不包含虚拟商品)的订单列表 2、完善发货单 导出的excel发货单中填写订单…

解析国标GB28181算法算力平台EasyGBS设备统一管理与视频汇聚能力

解析国标GB28181算法算力平台EasyGBS设备统一管理与视频汇聚能力在安防视频监控领域,国标GB28181协议已成为实现设备跨区域、跨平台互联互通的“通用语言”。国标GB28181平台EasyGBS作为该协议下的一个算法算力平台,…

深度解析 AI Agent、MCP 与 RAG:原理、区别及应用全景洞察

深度解析 AI Agent、MCP 与 RAG:原理、区别及应用全景洞察 一、引言 在人工智能蓬勃发展的当下,AI Agent(人工智能代理)、MCP(多智能体协作平台,Multi - Agent Collaboration Platform)和 RAG(检索增强生成,R…

Java并发之AQS详解

目录Java并发之AQS详解1. AQS 是什么?2. 核心原理2.1 一个状态:state2.2 一个队列:CLH 变种队列2.3 一套模板方法:获取与释放3. 工作流程(以 ReentrantLock 的独占模式为例)3.1 获取锁 (lock() -> acquire(1)…

从“看得见”到“看得懂”:国标GB28181算法算力平台EasyGBS与公安安防数字化的深度融合

从“看得见”到“看得懂”:国标GB28181算法算力平台EasyGBS与公安安防数字化的深度融合随着数字化技术的迅猛发展,公安领域正经历着从传统安防向智能化、网络化安防的深刻转变。这一变革不仅克服了传统视频监控系统的…

2025 年优法兰品牌最新推荐榜:优法兰骨相支撑、优法兰魔法 CC 针、优法兰 CaHA、优法兰骨相塑形、优法兰面部注射填充剂五大国内医美品牌专利技术、市场口碑及选择指南全景解析

当前医美市场中,优法兰相关面部填充、骨相塑形类产品品类繁杂,部分品牌缺乏权威认证、技术不成熟,导致消费者面临安全隐患与效果不达预期的风险。同时,信息不对称让求美者难以辨别产品优劣,无法精准匹配自身需求。…

10.13课后作业 - GENGAR

public class Test { public static void main(String[] args) { Foo obj1=new Foo(); Foo obj2=new Foo(); System.out.println(obj1obj2);//? } } class Foo{ int value=100; } 在 Java 中,用于比较对象的引用地址…

山海鲸可视化可以导入哪些常用的3D模型?

在数字孪生与三维可视化领域,模型导入的兼容性直接决定了项目创作的灵活性与落地效率。山海鲸可视化通过对 GLB/GLTF、FBX、RVT 等多种常用 3D 模型格式的全面支持,构建了灵活高效的模型导入体系,既满足了普通用户的…