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

题解:P16930 拱辰封仪

难点在于会 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;
}
http://www.jsqmd.com/news/1037249/

相关文章:

  • 2026上海迷你仓企业哪家好?附避坑攻略 - 热点速览
  • 实用百度网盘下载神器完全指南:轻松实现高速免登录下载体验
  • 为什么选择Luminaire?5大特性让时间序列异常检测更简单
  • 2026 潍坊市装饰公司口碑排行(人气 Top5) - 资讯速览
  • 2026上海黄金回收优质门店盘点:6家门店深度解析,收的顶高价回收无套路 - 奢侈品回收评测
  • 怎样高效整合开发工具:智能协作的3个核心策略
  • 2026国内玻璃钢罐公司排行榜 靠谱厂家盘点 - 热点速览
  • 上海理查德米勒手表橡胶钛金属表带更换与手腕尺寸调节科普,异形表壳表带定制适配专业方法 - 亨得利官方维修中心
  • 杭州2026品牌留学中介测评,顾问稳定性与后续服务谁更到位 - 资讯速览
  • 2026 地源热泵空调公司哪家好 全场景适配品牌综合实力盘点 - 变量人生001
  • 3分钟快速掌握Koodo Reader:全平台免费电子书阅读器的终极指南
  • 【滤波跟踪】基于扩展卡尔曼滤波器从IMU和GPS数据中计算无人机的姿态附Matlab代码
  • 2026 成都本地家里旧黄金长期存放,变现前保养与查验要点 - 逸程
  • 广州浪琴手表机芯深度保养与精准走时调校科普,机械表定期洗油养护周期,走时误差调整实操讲解 - 亨得利官方维修中心
  • 北京黄金回收哪家靠谱?2026年本地实测6家正规门店,禹竞报价口碑双第一 - 名奢变现站
  • 从黑白命令行到彩色世界:oh-my-posh如何让你的终端变得生动有趣
  • 2026深圳百达翡丽名表回收哪家靠谱?本地正规机构横向测评 - 名奢变现站
  • 2026年6月17日每日60秒读懂世界:清华全球第6、青海光热巨塔与SpaceX市值跃升
  • 2026年郑州市及周边区县黄金回收店铺推荐指南 - 清奢黄金上门回收
  • 选仓前必看上海迷你仓企业推荐榜清单 - 热点速览
  • 2026高性价比沙漠猫砂品牌横向测评排行 —— 基于天然除臭维度第三方实测对比 - 互联网科技品牌测评
  • 国产大模型竞争力本质:系统工程驱动的效能突围
  • 淮南职业技术学院中职部2026年招生计划——最新发布 - 我叫小周
  • 2026年6月回转风机厂家推荐指南 - 多才菠萝
  • 2026年青岛留学中介综合测评,个性化方案与模板化服务区别 - 资讯速览
  • Cherry Markdown:企业级文档自动化工作流的技术架构与实践
  • 2026年香薰棒深度测评:如何为品牌生产匹配最佳供应方案? - 热点速览
  • 免费搭建微信公众号RSS订阅:终极私有化部署完整指南
  • 北京黄金回收业界泰斗!合扬行情解读专业,精准预判金价走势 - 奢侈品交易观察员
  • 安徽合肥考不上高中300多分适合上什么卫校? - 我叫小周