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

重温主旋律

为啥要重温呢?哈哈哈,那当然是我之前写的看不懂了啦!可见我是有多菜啊哈哈哈哈哈哈

题意

给定一张有向图 \(G\),求有多少种边集使得只保留边集中的边原图仍然连通。

\(n\le 15,m\le n(n-1)\)

题意

令:\(edge_S\) 表示 \(S\) 内部边数,\(edge_{S,T}\) 表示一端在 \(S\) 另一端在 \(T\) 的方案数(\(S,T\) 可以有交,即 \(edge_{S}\) 等价于 \(edge_{S,S}\))。

首先这个 SCC 的条件就不太好做,考虑用总方案数减去非 SCC 的方案数,而非 SCC 就是缩点后有 \(\ge 2\) 个 SCC,而缩点后一定会形成一张 DAG,所以对 \(\ge 2\) 个点的 DAG 计数。DAG 容斥首先枚举零度点有几个点然后带上 \((-1)^{i+1}\) 的系数,设 \(g_S\) 表示 \(S\) 的点集构成若干个之间没有连边的 SCC 的带权方案数,则有转移 \(g_S=f_S-\sum_{T\subset S}f_Tg_{S\backslash T}\)(或者写成 \(g_0=-1,g_S=-\sum_{T\subseteq S}f_Tg_{S\backslash T}\)。本质相同),要保证 \(T\) 包含 \(S\) 的 lowbit 以确定顺序。再把 \(f\) 的转移方程写出来:\(f_S=2^{edge_{S}}-\sum_{T\subseteq S}2^{edge_{S,S\backslash T}}g_T\)。你发现 \(f_S,g_S\) 转移的时候要用到彼此的 dp 值,所以需要列个方程解……吗?由于 \(f\) 减掉的要保证 SCC 数 \(\ge 2\),所以当 \(S=T\)(即零度点是全局)时,\(g_T\)(即 \(g_S\))中不能算 \(f_S\) 本身。所以先转移 \(g_S\)\(T\subset S\) 部分,然后转移 \(f_S\) 的整体,最后将 \(g_S\) 加上 \(f_S\) 即可。复杂度 \(O(3^n)\)

dp 部分算完了,我们现在要求类似于 \(edge_{S,T}\) 的东西,注意到我们只会用到 \(S\subseteq T\) 的信息(并且左端点要求集合包含右端点要求集合),先预处理 \(e_{i,S}\) 表示点 \(i\) 到点集 \(S\) 的边个数,这个可以 \(O(2^n\operatorname{poly}(n))\) 求出。然后,枚举 \(S\),直接选出 \(T\) 的 lowbit \(p\) 然后 \(edge_{S,T}=edge_{S,T\backslash\{p\}}\cdot e_{p,S}\),转移也是 \(O(3^n)\) 的。表示一个 \(S\subseteq T\),于是总复杂度 \(O(3^n)\)

int n,m;
int pw[225];
int e0[15][15],e1[15][1<<15],e2[maxm];
vector<int>arr;
int to[1<<15];
int f[1<<15],g[1<<15];
inline void solve_the_problem(){n=rd(),m=rd();pw[0]=1;rep(i,1,m)pw[i]=pw[i-1]*2%mod;rep(i,1,m){int x=rd()-1,y=rd()-1;e0[x][y]=1;}const int U=(1<<n)-1;rep(S,0,U)per(i,n-1,0)to[S]=to[S]*3+((S>>i)&1);rep(i,0,n-1){e1[i][0]=0;rep(S,1,U){int p=__builtin_ctz(S);e1[i][S]=e1[i][S^(1<<p)]+e0[p][i];}}rep(S,0,U){arr.clear();for(int T=S;T;T=(T-1)&S)arr.pb(T);reverse(all(arr));e2[to[S]]=0;for(int T:arr){int p=__builtin_ctz(T);e2[to[S]+to[T]]=e2[to[S]+to[T^(1<<p)]]+e1[p][S];}}rep(S,1,U){int p=__builtin_ctz(S);g[S]=0;for(int T=(S-1)&S;T;T=(T-1)&S)if((T>>p)&1){suber(g[S],1ll*f[T]*g[S^T]%mod);}f[S]=pw[e2[2*to[S]]];for(int T=S;T;T=(T-1)&S){suber(f[S],1ll*g[T]*pw[e2[to[S]+to[S^T]]]%mod);}adder(g[S],f[S]);}write(f[U]);
}
http://www.jsqmd.com/news/351658/

相关文章:

  • RAG灵魂第一步:掌握这5种文档切分技巧,轻松让AI“读懂”你的资料库
  • 数字图像处理篇---明度与饱和度
  • 【架构实战】RedisTemplate与RedisPool架构对比:RedisTemplate 抽象层 vs JedisPool 资源层;同步阻塞 vs 异步非阻塞
  • 数字图像处理篇---描述颜色地的红、绿、蓝、黄
  • 记IP嵌入式端IP地址合法性校验
  • 数字图像处理篇---YPbPr颜色空间
  • 驾驭万亿参数 MoE:深度剖析 CANN ops-transformer 算子库的“核武库”
  • AIGC 的“数学心脏”:一文读懂 CANN ops-math 通用数学库
  • 数字图像处理篇---LAB颜色空间
  • 解构 AIGC 的“核动力”引擎:华为 CANN 如何撑起万亿参数的大模型时代
  • 数字图像处理篇---YUV颜色空间
  • CANN生态核心算子库合集:赋能AIGC多模态落地的全链路算力支撑
  • 开绕组永磁同步电机故障诊断及容错控制技术研究
  • 当 Triton 遇上 Ascend:深度解析 GE Backend 如何打通 NPU 推理“最后一公里”
  • ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理---惜分飞
  • 伺服电机驱动的连铸结晶器振动系统故障检测和容错控制
  • 数字图像处理篇---YCbCr颜色空间
  • 基于LSTM长短期记忆神经网络的轴承剩余寿命预测MATLAB实现
  • 基于小样本学习的滚动轴承故障诊断方法研究
  • 数字图像处理篇---HSL颜色空间
  • 2026年背涂胶行业十大品牌揭晓:谁将引领市场新格局?
  • AI使用控制采购指南:企业如何管理AI风险
  • java+vue基于springboot框架的企业进销存管理系统
  • 数字图像处理篇---HSV颜色空间
  • java+vue基于springboot框架的全国非物质文化遗产展示平台
  • Wasmer 7发布:全面增强Python支持能力
  • java+vue基于springboot框架的企业公司财务管理系统 员工薪资工资管理系统
  • 美好的生活是我们所有人的向往
  • 微软发布睡眠智能体后门检测新方法
  • 赋能康养升级,健康一体机,让康养馆更具专业竞争力