P11714 [清华集训 2014] 主旋律 Sol

news/2026/1/16 21:59:26/文章来源:https://www.cnblogs.com/WinterXorSnow/p/19494203

计数神题。

题目链接

前言

这篇题解没有什么特别的,纯粹是快速题解区变换。仅在一些地方加上了自己的理解,希望会有所帮助。

做本题之前,可以先看看P6846 [CEOI 2019] Amusement Park,可能会有所启发。

解题思路

DP(其一)

看到这道题的点很少,考虑数位DP,但是发现强连通很难刻画,因此考虑正难则反,去刻画非强连通。

何为非强连通?就是对着所有SCC进行缩点后,最后形成了DAG。这里再明确一下DAG的定义:DAG并不需要保证连通,只要有向无环就好了。

然后DAG存在一个性质。就是DAG可以一层层“拨开”,即每次挑选出入度为 0 的点,删去,剩下的点依然会形成DAG。

定义 \(dp_S\) 为点集 \(S\) 的答案(不可行的),\(E_{S,T}\) 表示从 \(S\) 连向 \(T\) 的边数。

那么先想到 \(dp_S = \sum_{T \subseteq S} dp_{S-T} \times 2^{E_{T,S-T}}\),即在原先的基础上,再添加上一层新的入度为 0 的点。但是发现在这个过程中,很可能这个 \(2^{E_{T,S-T}}\) 会一些入度为 0 的点,导致重复,因此考虑改写式子。

定义 \(g_T\) 表示 \(T\) 内的点入度为 0\(f_T\) 表示恰好 \(T\) 内点入度为 0,显然可以得到\(g_T = dp_{S-T} \times 2^{E_{T,S-T}}\)。然后开始推式子。

推式子

\[\begin{aligned} g_T = \sum_{T\subseteq R} f_T \end{aligned} \]

子集反演,得到

\[\begin{aligned} f_T = \sum_{T\subseteq R} (-1)^{|R|-|T|} g_R \end{aligned} \]

则:

\[\begin{aligned} dp_S &= \sum_{T \subseteq S,T \ne \emptyset} f_T \\ &= \sum_{T \subseteq S,T \ne \emptyset} \sum_{T \subseteq R} (-1)^{|R|-|T|}g_R\\ &= \sum_{T \subseteq S,T \ne \emptyset} \sum_{T \subseteq R} (-1)^{|R|}g_R(-1)^{|T|}\\ &= \sum_{R \subseteq S,R \ne \emptyset} (-1)^{|R|}g_R \sum_{T \subseteq R,T \ne \emptyset} (-1)^{|T|} \end{aligned} \]

这里先扩展下二项式定理的内容:

\[\begin{aligned} (a+b)^n = \sum_{k=0}^n a^kb^{n-k} \end{aligned} \]

\(a=1,b=-1\),则:

\[\begin{aligned} 0^n = \sum_{k=0}^n (-1)^{k} \end{aligned} \]

因此,有:

\[\begin{aligned} dp_S &= \sum_{R \subseteq S,R \ne \emptyset} (-1)^{|R|}g_R ([R == \emptyset]-1)\\ &= \sum_{R \subseteq S,R \ne \emptyset} (-1)^{|R|+1}g_R\\ &= \sum_{R \subseteq S,R \ne \emptyset} (-1)^{|R|+1}dp_{S-R} \times 2^{E_{R,S-R}} \end{aligned} \]

然后我们可以高兴的发现,这个式子没有什么用。但是我们可以得到一个重要的东西,组合系数

DP(其二)

重新DP,这次直接定义 \(dp_S\) 为答案了。回忆一下,如果不可行,就是要让缩点后的SCC形成DAG。那么可以定义 \(g_T\) 表示 \(T\) 内的点所在的SCC为入度为 0 的SCC。那么继续考虑拨开DAG,则:

\[\begin{aligned} dp_S = 2^{E_{S,S}} - \sum_{T \subseteq S} (-1)^?g_T \times 2^{E_{T,S-T}+E_{S-T,S-T}} \end{aligned} \]

然后发现容斥系数非常难定,回忆一下上面的容斥系数,奇数个点(入度为 0 的)为减,偶数个为加。那么这次作用在SCC上,也就变成了SCC的个数。

因此,让 \(g_T\) 拥有符号,表示奇数个SCC的方案数-偶数个SCC的方案数。那么dp式子就变成了:

\[\begin{aligned} dp_S = 2^{E_{S,S}} - \sum_{T \subseteq S} g_T \times 2^{E_{T,S-T}+E_{S-T,S-T}} \end{aligned} \]

g的推导

因为胡乱钦定SCC非常混乱,不妨让\(g_S\)中的 \(lowbit(S)\) 成为新加入的SCC中的一员。则有:

\[\begin{aligned} g_S = dp_S - \sum_{T \subset S} dp_T \times g_{S-T} \end{aligned} \]

这里通过 - 这个操作,使得奇偶性完成了变化。

也许会发现当 \(S=T\) 时,难以处理,但要考虑到 \(dp_S\) 作为合法的方案,不应该被减去,所以可以让 \(g_S\) 先不加上 \(dp_S\),最后再加上,显然是正确的。

e的推导

这里就参照题解了。自己推下,可以发现是对的。

\[E_{T,S-T}=E_{T+x,S-T-x}+\operatorname{popcount}(in_x\operatorname{and}T)-\operatorname{popcount}(out_x\operatorname{and}(S-T)) \]

\[E_{S,S}=E_{S-x,S-x}+\operatorname{popcount}(in_x\operatorname{and}S)+\operatorname{popcount}(out_x\operatorname{and}S) \]

Code

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define File(s) freopen(s".in","r",stdin);freopen(s".out","w",stdout)
#define LL long long
#define fi first
#define se second
const LL mod = 1e9 + 7;
const int M = 16,N = 1 << M | 5;
int n,m;
int mycount(int x){ return __builtin_popcount(x);}
int lowbit(int x){ return x & -x;}
int in[M],out[M];
LL dp[N],g[N];
LL pw[M * M];
int e1[N],e2[N];//E(T,S-T),E(S,S)
int id[N];
int main()
{IOS;cin >> n >> m;for(int i=0;i<n;i++)id[1<<i] = i;for(int i=1;i<=m;i++){int u,v;cin >> u >> v;u -- ,v -- ;out[u] |= (1 << v);in[v] |= (1 << u);}pw[0] = 1;for(int i=1;i<=m;i++)pw[i] = (pw[i-1] * 2ll ) % mod;for(int S=1;S<(1<<n);S++){int x = lowbit(S);e2[S] = e2[S - x] + mycount(in[id[x]] & (S - x)) + mycount(out[id[x]] & (S - x));}for(int S = 1;S < (1 << n);S ++ ){e1[S] = 0;for(int T = (S - 1) & S;T;T = (T - 1) & S){int x = lowbit(S - T);e1[T] = e1[T + x] - mycount(out[id[x]] & (S - T)) + mycount(in[id[x]] & T);}for(int T = (S - 1) & S;T;T = (T-1) & S){if(lowbit(T) != lowbit(S)) continue;g[S] -= (dp[T] * g[S - T]) % mod;g[S] += mod;g[S] %= mod;g[S] %= mod;}dp[S] = pw[e2[S]];for(int T = S;T;T = (T - 1) & S){dp[S] -= (g[T] * pw[e1[T] + e2[S-T]]) % mod;dp[S] += mod;dp[S] %= mod;}g[S] += dp[S];g[S] %= mod;}cout << dp[(1<<n)-1];return 0;
}

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

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

相关文章

GD5F1GM7UEYIGR:兆易创新1Gbit SPI NAND闪存,高效低功耗

品牌&#xff1a;兆易创新(GigaDevice) 型号&#xff1a;GD5F1GM7UEYIGR 容量&#xff1a;1Gbit 产品类型&#xff1a;NAND FLASH 接口类型&#xff1a; 标准SPI接口&#xff0c;支持1、2、4线模式。这意味着它只需要极少&#xff08;通常6-7个&#xff09;的GPIO引脚即可实…

夏天还不算开始——我,不会退役

或许每个人都会遇到吧,起起落落才是常态。一切过往,皆为序章。 :::align{right} ——莎士比亚 :::十月底,浙江从夏入冬,没有秋天。桂花?夹在冷热间开了一个星期,落完了。 具体经历,我不想回忆了。 2025/11/1 mo…

4B超越8B比肩30B!清华、面壁智能端侧智能体天花板开源

清华大学自然语言处理实验室&#xff08;THUNLP&#xff09;、中国人民大学、面壁智能&#xff08;ModelBest&#xff09;与OpenBMB开源社区联合发布并开源了端侧智能体模型AgentCPM-Explore。该模型仅凭4B参数规模便在深度探索类任务上取得了同尺寸模型的SOTA&#xff08;Stat…

企业软件供应链安全治理立项,方案书/立项书该怎么写?

当CTO或安全负责人指示“今年要把软件供应链安全做起来”时&#xff0c;很多项目负责人往往会陷入迷茫&#xff1a;“到底是应该买个SCA工具扫一扫&#xff1f;还是建立一套复杂的流程呢&#xff1f;我的项目立项书/方案书到底应该怎么写&#xff1f;后续的落地要怎么规划呢&am…

[Non] 字符串问题

字符串问题 大意 插入字符,查询字符。 初始串 \(s\), \(|s| \le 10^6\)。 思路 可以用平衡树,但是我选择更为强势的 STL 中的 rope。 头文件:#include<ext/rope> crope r1; // 存储 char 的 rope w…

谷歌Veo 3.1更新:更一致性、更具创造力和控制力

刚刚&#xff0c;谷歌Veo 3.1发布更新。通过素材转视频功能&#xff0c;实现了角色身份、背景与物体在动态场景中的高度一致性&#xff0c;并首次支持原生竖屏生成与4K超分画质&#xff0c;彻底打通了从静态图像到专业级动态叙事的创作链路。三大更新都是当前市场需求最大的领域…

评正高写书10万字什么价格?

评正高写书10万字什么价格&#xff1f; 评正高专著要求多少字&#xff1f; 下面淘淘论文来回答作者的这个疑问。一、评正高专著要求同样是评正高职称&#xff0c;要求有一定差异。一般评正高职称&#xff0c;对于专著的要求分为这几种情况&#xff1a;&#x1f539;独著或者合著…

Day15对象的方法与遍历对象

方法:<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"…

SCI分区是怎么划分的?

SCI分区是怎么划分的&#xff1f;SCI期刊的一区、二区、三区、四区是怎么分区的&#xff1f;很多作者知道SCI有几个分区&#xff0c;但是不知道期刊的分区标准。下面淘淘论文来回答作者的这个疑问。一、SCI期刊分区划分的原因SCI期刊数量有9000多种&#xff0c;而SSCI期刊有300…

深圳ACFlow智能营销系统:2026年中小企业AI驱动营销新范式

## 智能营销系统:2026年企业增长的数字化引擎在数字经济浪潮下,**智能营销系统**已成为企业提升市场竞争力、实现精准获客的核心工具。根据艾瑞咨询《2026年中国营销科技(MarTech)行业研究报告》显示,中国营销科技…

工业级文本转SQL新思路:成本暴降、超3000列超大数据库依然稳健

像一位经验丰富的数据库工程师那样去思考和探索&#xff0c;才是解决工业级文本转SQL&#xff08;Text-to-SQL&#xff09;难题的终极答案。华中科技大学与复旦大学联合发布了AutoLink框架&#xff0c;通过引入自主智能体&#xff0c;模拟人类工程师“探索-验证-迭代”的工作流…

ACP:2.从一个 .NET 实战开始,看 Agent 带来的真实差异

ACP:2.从一个 .NET 实战开始,看 Agent 带来的真实差异 在上一篇文章中,我们聊了 ACP 想解决的核心问题:当 AI 工具越来越多,Agent、Prompt、MCP、Skills 已经变成一种需要被管理的工程能力。这一篇,我们不再讲理…

C++跨平台开发挑战的技术

跨平台开发概述C作为跨平台语言的优劣势分析常见跨平台场景&#xff08;Windows/macOS/Linux/嵌入式等&#xff09;跨平台开发的核心目标&#xff1a;代码复用与一致性体验技术挑战与解决方案编译器与标准兼容性问题不同平台编译器&#xff08;GCC/Clang/MSVC&#xff09;对C标…

万卡的部署架构

目录一、理解题意二、回答思路(Step by Step)1️⃣ 量化和模型副本2️⃣ 模型并行策略3️⃣ 推理请求调度4️⃣ 弹性伸缩和高可用5️⃣ 核心要点总结(面试回答模板) 好的,这类面试问题,本质是在考察你对 大模型生…

IDM插件开发创意赛

引言IDM&#xff08;Internet Download Manager&#xff09;插件开发的意义与价值创意赛的背景与目标参赛者的技术门槛与预期成果IDM插件开发基础www.yunshengzx.comIDM插件架构与核心功能开发环境配置&#xff08;工具链、SDK、文档资源&#xff09;插件与IDM的交互机制&#…

建模智能体,AI 时代的数据治理新范式

从制度治理到生成式治理的根本转变 1 数据治理是上一代信息化的体系性问题 过去十多年&#xff0c;企业在数据治理上的投入并不算少。沿着数据治理方法论&#xff0c;我们有主数据、元数据、数据标准、数据质量、数据资产目录、数据开发与分析、安全分级分类……几乎每一个治理…

Claude Code 在 Windows 下的 nul 文件问题解决方案

前言 如果你在 Windows 上使用 Claude Code,可能会遇到一个奇怪的现象:项目目录里莫名其妙出现一个名为 nul 的文件,而且在资源管理器里怎么都删不掉,就像"幽灵文件"一样。 今天分享一篇来自 LINUX DO 论坛用户 tzcbz 的技术文章,深入分析了这个问题的根本原因,并提…

DCDN和CDN科普:动态内容加速的秘密武器

前言 在早期的互联网时代&#xff0c;网站内容大多是图片、CSS样式文件、JavaScript脚本等静态资源。CDN&#xff08;内容分发网络&#xff09;正是为了解决这类内容的分发效率问题而诞生的。 然而&#xff0c;随着互联网的快速发展&#xff0c;我们从2G时代走到3G、4G&#xf…

探索AI原生应用领域,AI代理引领新潮流

探索AI原生应用领域,AI代理引领新潮流 关键词:AI原生应用、AI代理、大语言模型、自主决策、人机协作、智能自动化、未来趋势 摘要:本文深入探讨AI原生应用领域的最新发展,重点分析AI代理技术的核心原理和应用场景。我们将从基础概念出发,逐步解析AI代理如何通过大语言模型…