尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

题解:P16930 拱辰封仪

题解:P16930 拱辰封仪
📅 发布时间:2026/6/18 17:52:55

难点在于会 NTT。

尝试刻画 \(x,y\) 之间存在长度为奇数的路径的条件。显然 \(x,y\) 要在同一个连通块中。注意到若连通块中存在奇环,则任取一条路径走奇环即可改变其长度奇偶性,因此一定存在长度为奇数的路径;若连通块为二分图,则存在长度为奇数的路径当且仅当 \(x,y\) 在二染色后异色。

把 \(E^2-O^2\) 转化成求 \((E+O)(E-O)\)。

先求 \(E+O\),也就是求总方案数。对每个连通块构造多项式:

  • 若连通块不为二分图,设共有 \(c\) 个点,构造多项式 \(1+cx\)。
  • 若连通块为二分图,设二染色后有 \(c_0\) 个左部点,\(c_1\) 个右部点,构造多项式 \((1+x)^{c_0}+(1+x)^{c_1}-1\)。

把每个连通块对应的多项式分治乘起来即可。

再求 \(E-O\),相当于求所有方案的 \((-1)^{\sum a_i}\) 之和。类似地对每个连通块构造多项式:

  • 若连通块不为二分图,设有 \(c_0\) 个点点权为偶数,\(c_1\) 个点点权为奇数,构造多项式 \(1+(c_0-c_1)x\)。
  • 若连通块为二分图,设二染色后,左部点中点权为偶数/奇数的点有 \(c_{0,0/1}\) 个,右部点中点权为偶数/奇数的点有 \(c_{1,0/1}\) 个,构造多项式 \((1+x)^{c_{0,0}}(1-x)^{c_{0,1}}+(1+x)^{c_{1,0}}(1-x)^{c_{1,1}}-1\)。

同样分治乘即可。

时间复杂度为 \(\mathcal{O}(n\log^2{n})\)。

主要代码
poly binom1(int n) {poly H(n + 1);for (int i = 0; i <= n; ++i) H[i] = C(n, i);return H;
}poly binom2(int n) {poly H(n + 1);for (int i = 0; i <= n; ++i) H[i] = C(n, i) * (i & 1 ? -1 : 1);return H;
}poly solve(const vector<poly> &vec, int l, int r) {if (l == r) return vec[l];int mid = l + r >> 1;return mul(solve(vec, l, mid), solve(vec, mid + 1, r));
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cin >> n >> m >> k;init(n);for (int i = 1; i <= n; ++i) cin >> a[i];for (int i = 1; i <= m; ++i) {int u, v;cin >> u >> v;G[u].emplace_back(v);G[v].emplace_back(u);}fill(c + 1, c + n + 1, -1);int id = 0;for (int x = 1; x <= n; ++x) {if (c[x] != -1) continue;++id;bool suc = true;array<int, 2> cntCol;array<array<int, 2>, 2> cntVal;cntCol.fill(0);for (auto &arr : cntVal) arr.fill(0);auto dfs = [&](auto &&self, int u) -> void {++cntCol[c[u]];++cntVal[c[u]][a[u] & 1];for (auto v : G[u]) {if (c[v] == -1) {c[v] = c[u] ^ 1;self(self, v);} else if (c[u] == c[v]) {suc = false;}}};c[x] = 0;dfs(dfs, x);poly p1, p2;if (!suc) {p1 = {1, cntCol[0] + cntCol[1]};p2 = {1, cntVal[0][0] + cntVal[1][0] - cntVal[0][1] - cntVal[1][1]};} else {p1 = add(binom1(cntCol[0]), binom1(cntCol[1]));p1[0] -= 1;p2 = add(mul(binom1(cntVal[0][0]), binom2(cntVal[0][1])),mul(binom1(cntVal[1][0]), binom2(cntVal[1][1])));p2[0] -= 1;}F1.emplace_back(p1);F2.emplace_back(p2);}auto H1 = solve(F1, 0, F1.size() - 1);auto H2 = solve(F2, 0, F2.size() - 1);mint val1 = k < H1.size() ? H1[k] : 0, val2 = k < H2.size() ? H2[k] : 0;cout << val1 * val2;return 0;
}

相关新闻

  • 2026年7月上海刑事辩护律师推荐榜|王静专业可靠服务好,本土刑辩法律服务律师与律所盘点 - 十大排行榜推荐
  • 澳洲海牙认证在哪儿办?澳洲海牙认证办理流程如何? - 指上通
  • 2026北京黄金回收透明榜|全程可视+光谱无损检测+无隐形扣费靠谱商家盘点 - 名奢变现站

最新新闻

  • 30+种音视频格式全免费转!2026在线保姆级大合集,这一篇够了 - 时时资讯
  • BoTorch实战指南:PyTorch原生贝叶斯优化原理与工程落地
  • Microchip嵌入式开发资源地图:从官方支持到实战工具链全解析
  • 多维聚合实战:从pandas滚动窗口到业务可解释指标
  • 北京公司注册代办怎么选?2026年合规标准、避坑指南与机构对比盘点 - 互联网科技品牌测评
  • 杭州黄金回收红黑榜 2026 版:避坑黑名单 + 高保值优选门店,上门 / 到店渠道全面对比 - 奢侈品回收评测

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号