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

几道树上计数问题

几道树上计数问题
📅 发布时间:2026/6/22 20:05:38

QOJ 5437 Graph Completing

link

题意

给你一个 \(n\) 个点 \(m\) 条边的图,求多少种加边方案,使得该图变为一个边双联通图。必须保证该图始终为简单图,初始给出的图保证是简单图。

\(n \le 5000, m \le 10000\)。

思路

首先可以想到要边双缩点,容易发现缩点之后得到一棵树。

问题转换为连接树上若干点对,产生若干边双联通分量,最后要囊括所有点。
我们可以从环拓展到边双来看,一个环由树上 \(u\) 到 \(v\) 的路径和非树边 \((u, v)\) 构成,这可以使得 \(u\) 到 \(v\) 路径上的所有点、边都加入到边双中。
又边双联通关系是有传递性的,故只需要覆盖完所有的边就可以达到目标。

这个东西不好计数,反过来看,发现不覆盖一条边相当于把这条边断开,限制在某一范围内连边,这是容易计算的。
这启发我们考虑容斥,令 \(S_i\) 为满足 \(i\) 号边被覆盖的连边方案集合。

\[\begin{align*} | \bigcap \limits _ i S_i | &= |U| - | \bigcup \limits _ i \overline{S_i} | \\ &= |U| - \sum \limits _ {T \subseteq S, T \ne \varnothing} (-1) ^ {|T| - 1} \times | \bigcap \limits _ {i \in T} \overline{S_i}|\\ &= |U| + \sum \limits _ {T \subseteq S, T \ne \varnothing} (-1) ^ {|T|} \times | \bigcap \limits _ {i \in T} \overline{S_i}|\\ &= \sum \limits _ {T \subseteq S} (-1) ^ {|T|} \times | \bigcap \limits _ {i \in T} \overline{S_i}| \end{align*} \]

问题转换为以 -1 的权值钦定一条边不被覆盖,也就是断开这条边,在剩下的连通块里操作。
考虑一个连通块内部操作的方案数(此时不限制是否覆盖边),这取决于能连的边个数,结果即为 2 的“能连边个数”幂。

\[\begin{align*} 能连边数 &= 连通块内总边数 - 已经连上的 \\ &= \binom {连通块大小} 2 - 所有 BCC 内部的边数之和 - 树边个数\\ &= \binom {连通块大小} 2 - 所以 BCC 内部的边数之和 - (连通块内 BCC 个数 - 1)\\ \end{align*} \]

那么全局看,所有的连通块贡献积为:

\[\begin{align*} &2 ^ {\left (\sum _ {连通块} { \binom {连通块大小} 2 } \right ) - (m - 树边个数) - 全局 BCC 个数 + 连通块个数} \\&= \frac {2 ^ {\left (\sum _ {连通块} {\binom {连通块大小} 2 + 1}\right ) }} {2 ^ {m + 1}}\end{align*} \]

然后 dp 统计一下分子即可。\(f_{u, i}\) 表示 \(u\) 子树中,\(u\) 所在连通块大小为 \(i\) 时的贡献和。

\[\begin{align*} f'_{u, i + j} &\leftarrow f_{u, i} \times f_{v, j} \\ f'_{u, i} &\leftarrow (-1) \times f_{u, i} \times \left( \sum _ j {f_{v, j} \times 2 ^ {\binom {j} {2} + 1}} \right) \end{align*} \]

把第二行那一坨东西设为 \(g_v\) 同步维护一下即可。

注意,计算连通块大小时,务必记得这里的点实际上是 BCC,应当带权。

代码

const int N = 5005;
const int mod = 998244353;
const int MAX_POW = N * (N - 1) / 2 + 2;int n, m;int pw[MAX_POW];vector<pair<int, int>> edge;
vector<int> gr[N];int low[N], dfn[N], dfncnt = 0;
int stk[N], top = 0;
bool in_stk[N];int bcc_cnt = 0;
int bcc_id[N];vector<int> tr[N];
int siz[N];
int f[N][N];
int g[N];
int tmp[N];void tarjan(int u, int fa){low[u] = dfn[u] = ++dfncnt;stk[++top] = u;in_stk[u] = 1;for(int v : gr[u]){if(v == fa) continue;if(!dfn[v]){tarjan(v, u);low[u] = min(low[u], low[v]);}else if(in_stk[v]){low[u] = min(low[u], dfn[v]);}}if(dfn[u] == low[u]){bcc_cnt++;do{bcc_id[stk[top]] = bcc_cnt;in_stk[stk[top]] = 0;siz[bcc_cnt]++;} while(stk[top--] != u);}
}int qpow(int a, int b){int res = 1;while(b){if(b & 1) res = 1ll * res * a % mod;a = 1ll * a * a % mod;b >>= 1;}return res;
}void dfs(int u, int fa){f[u][siz[u]] = 1;for(int v : tr[u]){if(v == fa) continue;dfs(v, u);rep(i, 1, siz[u]){rep(j, 1, siz[v]){tmp[i + j] = (tmp[i + j] + 1ll * f[u][i] * f[v][j] % mod) % mod;}}rep(i, 1, siz[u]){tmp[i] = (tmp[i] + (-1ll * f[u][i] * g[v]) % mod + mod) % mod;}rep(i, 1, siz[u] + siz[v]){f[u][i] = tmp[i];tmp[i] = 0;}siz[u] += siz[v];}rep(i, 1, siz[u]){g[u] = (g[u] + 1ll * pw[i * (i - 1) / 2 + 1] % mod * f[u][i] % mod) % mod;}
}void solve_test_case(){n = read(), m = read();pw[0] = 1;rep(i, 1, n * (n - 1) / 2 + 1){pw[i] = 1ll * pw[i - 1] * 2 % mod;}rep(i, 1, m){int u = read(), v = read();gr[u].push_back(v);gr[v].push_back(u);edge.push_back({u, v});}tarjan(1, 0);//	rep(i, 1, n) deb(bcc_id[i]);rep(i, 0, m - 1){int u = edge[i].first, v = edge[i].second;u = bcc_id[u], v = bcc_id[v];if(u != v){tr[u].push_back(v);tr[v].push_back(u);}}dfs(1, 0);int ans = 0;rep(i, 1, siz[1]){ans = (ans + 1ll * f[1][i] * qpow(2, i * (i - 1) / 2 + 1) % mod) % mod;}ans = 1ll * ans * qpow(499122177, m + 1) % mod;write(ans);
}

相关新闻

  • 接入层傻瓜机引起的VLAN间环路
  • Spring IOC 源码学习一 基本姿势
  • 可持久化01trie板子

最新新闻

  • 5个步骤掌握MangoHud:Linux游戏性能监控的终极指南
  • (2026最新)包头防水补漏正规公司甄选推荐:漏水检测维修-暗管漏水精准定位检测漏水点-卫生间/厨房/屋顶/阳台/渗漏水维修-本地人必选的正规测漏公司 - 即刻修防水
  • 分布式图Transformer训练:自适应并行与稀疏计算优化实践
  • 从注意力机制到角色向量:深入理解LLM心智定位与工程实践
  • 三步恢复群晖NAS视频管理功能:DSM 7.3 Video Station修复指南 [特殊字符]
  • 如何将Android中的照片传输到Windows 11/10

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

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

关于尧图

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

服务项目

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

快速链接

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

联系方式

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

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