当前位置: 首页 > news >正文

P6478 [NOI Online #2 提高组] 游戏 题解 二项式反演 + 树上背包

题目链接:https://www.luogu.com.cn/problem/P6478

解题思路完全来自 GaryH大佬的博客

注意:

由于 \(f_{1, i}\) 表示钦定了 \(i\) 对,但是剩余的 \(\frac{n}{2} - i\) 对可以任意组合,所以

\(f_{1, i}\) 还得乘上 \((\frac{n}{2} - i)!\)

示例程序:

#include <bits/stdc++.h>
using namespace std;
const long long mod = 998244353;
const int maxn = 5005;void add(long long &a, long long b) {a = (a + b % mod + mod) % mod;
}int n, c[maxn], sz[maxn][2], mx[maxn]; // mx[u] : 最多能匹配多少对
long long f[maxn][maxn/2], tmp[maxn], fac[maxn] = { 1 };
char s[maxn];
vector<int> g[maxn];struct Binom {int c[maxn/2][maxn/2];void init() {for (int i = 0; i <= n/2; i++) {for (int j = 0; j <= i; j++) {if (j == 0 || j == i)c[i][j] = 1;elsec[i][j] = (c[i-1][j-1] + c[i-1][j]) % mod;}}}} binom;void dfs(int u, int p) {sz[u][ c[u] ] = 1;f[u][0] = 1;for (auto v : g[u]) {if (v != p) {dfs(v, u);int num1 = mx[u], num2 = mx[v];fill(tmp, tmp+num1+num2+2, 0);for (int i = 0; i <= num1; i++)for (int j = 0; j <= num2; j++)add(tmp[i+j], f[u][i] * f[v][j]);copy(tmp, tmp+num1+num2+2, f[u]);sz[u][0] += sz[v][0];sz[u][1] += sz[v][1];mx[u] += mx[v];}}for (int i = mx[u] + 1; i > 0; i--) {int cnt = sz[u][ 1 - c[u] ] - (i - 1);if (cnt > 0) {add(f[u][i], f[u][i-1] * cnt);if (i == mx[u] + 1 && f[u][i])mx[u]++;}}}int main() {scanf("%d%s", &n, s+1);binom.init();for (int i = 1; i <= n/2; i++)fac[i] = fac[i-1] * i % mod;for (int i = 1; i <= n; i++)c[i] = s[i] - '0';for (int i = 1, u, v; i < n; i++) {scanf("%d%d", &u, &v);g[u].push_back(v);g[v].push_back(u);}dfs(1, 0);for (int i = 0; i <= n/2; i++) {f[1][i] = f[1][i] * fac[n/2-i] % mod;}for (int k = 0; k <= n/2; k++) {long long ans = 0;for (int i = k, flag = 1; i <= n/2; i++, flag = -flag) {long long tmp = binom.c[i][k] * f[1][i] % mod;add(ans, flag * tmp);}printf("%lld\n", ans);}return 0;
}
http://www.jsqmd.com/news/614844/

相关文章:

  • Open Images:大规模多标签图像分类与目标检测数据集的技术实现
  • 从命令行到IDE:Pytest在PyCharm和VSCode中的高效运行与调试全攻略(附参数详解)
  • 解密Bebas Neue:现代网页设计中不可或缺的免费开源字体
  • Google 迎来「DeepSeek 时刻」:TurboQuant算法实现bit无损、×加速、×压缩、零预处理范
  • HarmonyOS单位转换API迁移指南与最佳实践
  • 连续血糖监测数据集终极指南:解锁糖尿病研究的标准化数据宝库
  • Java转Agent,哪种人最容易跑出来
  • 安卓启动页兼容性进阶指南:从基础适配到Android 12+ SplashScreen API深度优化
  • 手把手教你用Video-LLaVA和LoRA,微调自己的视频异常分析‘侦探’(附代码思路)
  • 不用死刷算法题!从零手搓伪随机数,吃透DP、状态机与缓存优化
  • OpenSpec、Superpowers 和 Harness:AI 工程化开发的三层拼图
  • 电脑风扇智能调控全攻略:从噪音优化到散热方案的完美平衡
  • 一篇文章带你了解MyBatis!!!
  • 从“词元”到“符元”:Token 中文名背后的 AI 底层认知之争
  • 工业网关上线前必须做的7项压力测试,第4项让3家客户当场终止验收:PHP-FPM+Docker+K8s边缘集群压测黄金指标手册
  • Mistral 7B+Neo4j:零代码构建动态知识图谱的实战指南
  • 【量化交易】南微医学(688029)的短线投资机会分析(2026/04/09 上午盘中观察)
  • 别再死磕大卷积核了!用3x3小核+ShiftwiseConv,在ImageNet上跑出SOTA的保姆级解读
  • net::ERR_TOO_MANY_REDIRECTS
  • realme Q3 5G刷机全攻略:从TWRP到Magisk Root权限获取
  • WPF新手村教程(七)—— 终章(MVVM架构初见杀)俑
  • C++11 新特性 右值引用
  • 外卖霸王餐API接口架构设计思路分析
  • 2026年实验室耗材淘宝代运营公司排名前五专业深度测评 - 电商资讯
  • 分享免费的PDF 翻译 原格式
  • 揭秘书匠策AI:毕业论文的“智慧魔法棒”
  • 【26最新大英赛】2012-2026年全国大学生英语竞赛ABCD类历年真题及答案+核心词汇电子版PDF
  • 从0搭建你的第一个AI Agent
  • Agent Client Protocol 全景解析人
  • 如何解决网页图片格式转换难题?这款Chrome扩展让效率提升3倍