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

Atcoder [ABC160F] Distributing Integers 题解 [ 蓝 ] [ 有向树拓扑序计数 ] [ 换根 DP ]

Distributing Integers

一个经典结论 + 换根 DP 的题。

结论 \(1\):对于任意一颗有向树,无论是内向还是外向的,其拓扑序个数都是 \(\dfrac{n!}{\prod_{i = 1}^{n}size_i}\)

结论 \(\bm 1\) 证明:

这里以内向树为例(外向树也是同理),考虑计数转概率,设拓扑序合法的概率为 \(P\),则拓扑序总方案数为 \(P\times n!\)

对每个节点的限制分别考虑,对于一个节点 \(u\),其限制就是子树内的所有节点的拓扑序都在 \(\bm u\) 的拓扑序前。因此这一条限制的合法概率为 \(\dfrac{(size_u - 1)!}{size_u!} = \dfrac{1}{size_u}\)

显然每一条限制是互相独立的,于是将他们相乘即可得到概率 \(P = \dfrac{1}{\prod_{i = 1}^{n}size_i}\)。因此总方案数为 \(\dfrac{n!}{\prod_{i = 1}^{n}size_i}\)

这启示我们可以从子树大小的角度求解问题。剩下的就很显然了,我们先做一遍普通树形 DP 求解以 \(1\) 为根的结果,然后注意到根节点从 \(u\) 移动到 \(v\)子树大小受到影响的只有 \(\bm{u, v}\) 两个点,于是考虑换根 DP,转移的时候将他们的贡献去掉,重新算一遍即可。

使用线性预处理逆元,即可做到时间复杂度 \(O(n)\)

#include <bits/stdc++.h>
#define fi first
#define se second
#define eb(x) emplace_back(x)
#define pb(x) push_back(x)
#define lc(x) (tr[x].ls)
#define rc(x) (tr[x].rs)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
using pi = pair<int, int>;
const int N = 200005;
const ll mod = 1e9 + 7;
vector<int> g[N];
int n;
ll inv[N], prod = 1, sz[N], dp[N];
void init()
{inv[1] = 1;for(int i = 2; i < N; i++)inv[i] = (mod - mod / i) * inv[mod % i] % mod;
}
void dfs1(int u, int fa)
{sz[u] = 1;for(auto v : g[u]){if(v == fa) continue;dfs1(v, u);sz[u] += sz[v];}prod = (prod * inv[sz[u]]) % mod;
}
void dfs2(int u, int fa)
{for(auto v : g[u]){if(v == fa) continue;dp[v] = (dp[u] * sz[v] % mod * inv[n - sz[v]]) % mod;dfs2(v, u);}
}
int main()
{//freopen("sample.in", "r", stdin);//freopen("sample.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);init();cin >> n;for(int i = 1; i <= n; i++) prod = (prod * i) % mod;for(int i = 1; i < n; i++){int u, v;cin >> u >> v;g[u].push_back(v);g[v].push_back(u);}    dfs1(1, 0);dp[1] = prod;dfs2(1, 0);for(int i = 1; i <= n; i++) cout << dp[i] << "\n";return 0;
}
http://www.rkmt.cn/news/44328.html

相关文章:

  • 2025年11月苏州医疗纠纷律师推荐周旭昊医学法学融合示范
  • 2025年11月四川护栏厂家推荐榜:五强对比评测与选购全攻略
  • 2025年塑料托盘品牌综合实力排行榜前十强揭晓
  • 2025年专业的格力空调代理专业团队推荐榜
  • 2025年11月股权融资律师推荐指南专业视角
  • 2025年11月公司股权律师推荐榜单出炉专业视角解析
  • 2025年11月纯粮白酒品牌推荐榜:久久领衔十强口碑排行
  • 2025年口碑好的储能高压直流接触器用户好评厂家排行
  • 2025年质量好的企业环保咨询用户满意度TOP榜单
  • 2025年口碑好的成都标书行业精选榜
  • 2025年质量好的档案文件销毁品牌服务排行榜
  • 2025年中国离婚律所联系电话推荐:婚姻家事精品律所全收录
  • 2025年中国遗嘱继承律所联系电话推荐:全程陪伴省心传承
  • 2025年评价高的上海液冷系统IDCE数据中心展合作伙伴
  • 2025年北京离婚房产律师联系电话推荐:靠谱渠道与预约技巧
  • 2025年靠谱的零角度二段力铰链用户好评厂家排行
  • 2025年中国房产继承律师联系电话推荐:热线直通与预约技巧
  • 2025年深圳离婚律所联系电话推荐:高效沟通快速响应
  • 2025年诈骗辩护律师联系电话推荐:资深律师亲办案例
  • 2025年靠谱的目视化规划施工最新畅销推荐榜供应商
  • 2025年上海血管瘤医院联系电话推荐:浦东到静安全覆盖
  • 完整教程:SAP中的第三方销售与单独采购业务详解
  • 2025年比较好的资源教室器材行业内知名厂家排行榜
  • 2025年服务器回收公司联系电话推荐:15年深耕安全无忧
  • 2025年质量好的杭州磨床行业内口碑厂家排行榜
  • 2025年知名的长毛绒滤袋最新TOP厂家排名
  • 2025年11月哺光仪产品推荐榜:唯迪科与四款热门机型横向评测
  • 2025年服务器回收公司联系电话推荐:全国响应2小时到场
  • 2025年评价高的一体化固态继电器厂家最新TOP排行榜
  • 华为哈勃投资的激光雷达厂商,终止IPO