题解:AT_mujin_pc_2017_d Oriented Tree

news/2025/10/9 15:27:34/文章来源:https://www.cnblogs.com/LUlululu1616/p/19131223

题意:给出一棵树,现在你可以将其定向,记 \(d(u,v)\) 为从 \(u\)\(v\) 需要逆多少条边才能走到。记 \(D\) 为所有的定向方式的 \(\max d(u,v)\),问有多少颗树 \(\max d(u,v)\) 等于 \(D\)\(n\le 1000\)

做法:

首先先考虑把 \(D\) 是多少直接弄出来,考虑直接取直径,假设长度为 \(l\),那么 \(D=\lfloor\frac{l+1}{2}\rfloor\)。并且容易构造,直接让奇数层往外,偶数层往里就可以练出来。

那么既然都这么取了,我们不妨也直接以直径中心为根去研究。首先有个很显然的 \(dp\)\(dp_{u,x,y}\) 代表子树中向下最大需要逆 \(x\) 条,向上最大逆 \(y\) 条的方案数,转移直接枚举两颗子树之间的限制就可以,但是这样复杂度太高了,大概是 \(O(n^4)\) 的。

发现其实我们转移的时候需要处理子树间的限制,这样太麻烦了,我们先转化一下,考虑更简单地表示 \(d(u,v)\)。记 \(h_u\) 代表 \(u\) 向根走的边数减去向下的边数的差,则 \(d(u,v)=\frac{|h_u-h_v|+\operatorname{dis}(u,v)}{2}\)。先不妨设直径长度为 \(2D\),则 \(|h_u-h_v|\le 2D-\operatorname{dis}(u,v)\)

然后我们考虑得极端一点,假设 \(u,v\) 出于根的不同的子树,那么会有 \(|h_u|\le D-dep_u\)。同时我们再考虑可以相同子树的 \(u,v\),会发现 \(|h_u-h_v|\le |h_u|+|h_v|\le 2D-dep_u-dep_v\le 2D - \operatorname{dis}(u,v)\),发现这样我们就可以完全不用管子树间的限制了!

此时因为一组合法的 \(h\) 即对应一颗树,所以我们只需要 dp 这个 \(h\) 数组就可以了,因为我们直接选取了直径中点为根,所以要求叶子节点的 \(h\) 全部相同。并且这个 \(h\) 数组限制相当少,只要满足 \(|h_u|\le D-dep_u,|h_u-h_v|=1\) 即可,直接记 \(dp_{u,i}\) 代表 \(h_u=i\) 的情况即可。

做到这里还有一个问题,前面也提到我们假设的直径长度为 \(2D\),但是也有可能直径中点落在边上,假设在 \((s, t)\) 上,那么就是有一侧的满足 \(|h_u|\le D-dep_u,\) 另一侧满足 \(|h_u|\le D+1-dep_u\),并不需要全部的叶子节点都相同。但是这里有个问题,注意到相邻两层间的 \(h_u\) 奇偶性不同,所以直接按这个 dp 可能会出现两侧叶子节点都是偶数这种情况,这种情况我们最后再容斥一下减掉就可以了。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1050, N = 505, mod = 1e9 + 7;
int n, a[maxn], b[maxn];
vector<int> e[maxn];
int dep[maxn], pth[maxn], tot, f[maxn];
void dfs1(int u, int fa) {dep[u] = dep[fa] + 1; f[u] = fa;for (int i = 0; i < e[u].size(); i++) {int v = e[u][i];if(v == fa)continue;dfs1(v, u);}
}
int dp[maxn][maxn];
void dfs2(int u, int fa, int d, int op) {for (int i = 0; i < e[u].size(); i++) {int v = e[u][i];if(v == fa)continue;dep[v] = dep[u] + 1;dfs2(v, u, d, op);}int l = dep[u] - d + N + op, r = d - dep[u] + N + op;for (int i = l; i <= r; i++) {dp[u][i] = 1;for (int j = 0; j < e[u].size(); j++) {int v = e[u][j];if(v == fa)continue;dp[u][i] = dp[u][i] * (dp[v][i - 1] + dp[v][i + 1]) % mod;} }
}
int cal(int s, int t, int d, int op) {memset(dp, 0, sizeof(dp));dep[s] = dep[t] = 0;if(!op)dfs2(s, t, d + 1, 0), dfs2(t, s, d, 0);elsedfs2(s, t, d, 0), dfs2(t, s, d, 1);int ans = 0;for (int i = 1; i <= 2 * N; i++)ans = (ans + dp[s][i] * (dp[t][i - 1] + dp[t][i + 1]) % mod) % mod;return ans;
}
signed main() {cin >> n;if(n == 2) {cout << 2 << endl;return 0;}for (int i = 1; i < n; i++) cin >> a[i] >> b[i], e[a[i]].push_back(b[i]),e[b[i]].push_back(a[i]);dfs1(1, 0);int nw = 0;for (int i = 1; i <= n; i++)if(dep[nw] < dep[i])nw = i;dfs1(nw, 0);int pos = 0;for (int i = 1; i <= n; i++)if(dep[pos] < dep[i])pos = i;while(pos)pth[++tot] = pos, pos = f[pos];if(tot % 2 == 1) {int pos = pth[tot / 2 + 1];dep[pos] = 0, dfs2(pos, 0, tot / 2, 0);int ans = 0;for (int i = 1; i <= 2 * N; i++)ans = (ans + dp[pos][i]) % mod;cout << ans << endl;}else {int s = pth[tot / 2], t = pth[tot / 2 + 1], d = tot / 2 - 1;cout << (cal(s, t, d, 0) + cal(t, s, d, 0) - cal(s, t, d, 1) - cal(t, s, d, 1) + 2 * mod) % mod << endl;}return 0;
}

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

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

相关文章

Redis缓存穿透优化

目录背景和价值一、核心方案1:拦截无效请求——从源头过滤不存在的Key1. 布隆过滤器(Bloom Filter):高效拦截不存在的Key2. 业务规则校验:过滤明显无效的请求二、核心方案2:缓存空数据——避免相同无效请求重复穿…

元空间的两个重要参数

目录元空间的两个重要参数 元空间的两个重要参数 -XX:MetaspaceSize=128m # 这不是"初始大小",而是"GC触发线" ,当元空间使用量接近这个值时,触发GC尝试回收 -XX:MaxMetaspac…

工作电压2.4V-5.5V*低功耗单路触摸/单键触控感应芯片VKD233HR DFN6L

VKD233HR是单通道触摸检测芯片,功耗低、工作电压范围 宽以及稳定的触摸检测效果可以广泛的满足不同应用的需求, 此触摸检测芯片是专为取代传统按键而设计,内建稳压电路, 提供稳定电压给触摸检测电路使用,触摸检测PAD…

小迪安全v2023学习笔记(八十七讲)—— 安卓逆向篇Smail语法反编译重打包Activity周期Hook模块 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025.10.9——1橙

普及- P1276 校门外的树(增强版) 标签上有线段树,但其实模拟也能过。

抽象函数的定义域

抽象函数的定义域保姆级教学例题 已知\(f(x^2-1)\)的定义域是\((1,2)\),求\(f(x+3)\)的定义域. 结论 已知\(f(g(x))\)的定义域是\((a,b)\),求\(f(h(x))\)的定义域. 套路: ① 由\(f(g(x))\)的定义域是\((a,b)\)得\(a…

GEO优化系统哪个最好?

在当今竞争激烈的商业环境中,各大AI平台上的搜索排名已成为企业展示自身实力、吸引潜在客户的关键因素。为了在众多竞争者中脱颖而出,许多企业开始寻求专业的GEO优化服务,以提升自身在AI平台上的搜索排名。GEO优化系…

6G多站多智能超表面(RIS)

面向6G的多站多智能超表面(Multi-RIS for 6G)的 原理机制 和 系统架构。🧩 一、基础概念:RIS 是什么? RIS(Reconfigurable Intelligent Surface,可重构智能超表面)是一种由大量可调单元(Meta-atoms)组成的…

缓冲区管理

什么是缓冲区,有什么作用 缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可以利用内存作为缓冲区 使用硬件缓冲区的成本高,容量小,一般仅用在对速度要求非常高的场合 缓冲区的作用 缓和CPU与io设备之间的速…

Oracle故障处理:ASM手动修复磁盘头

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。Oracle故障处…

智慧考试微信小程序系统:一站式在线考试解决方案

在数字化浪潮席卷各行各业的当下,传统考试模式面临组织成本高、效率低、数据统计难等痛点。智慧考试微信小程序系统应运而生,以 “网络化、无纸化、自动化” 为核心,为政府、学校、企业等各类主体提供在线考试、竞赛…

深入解析:【双光相机配准】可见光相机内参标定流程

深入解析:【双光相机配准】可见光相机内参标定流程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

oracle中引号的使用总结与报错信息

错误一:ORA-00942:表或视图不存在将语句修改为select * from "BIN_PxRE"好使橘子Jane

2025 年电线电缆厂家最新推荐:实力厂家榜单重磅发布,涵盖多品类线缆及专业选择指南国标/朝阳/低压/阻燃/耐火/北京电线电缆厂家推荐

在当前工业建设、民生工程与新兴产业快速发展的背景下,电线电缆作为核心传输载体,其品质与性能直接影响项目安全与效率。然而,行业内企业规模参差不齐,部分产品存在质量隐患,且市场需求细分明显,从高压电力传输到…

5分钟,15分钟,差距大,做5分钟线要严格止损

5分钟4735,空 4738,空止 15分钟4774,空,4795,空止 5分钟,15分钟之间差距40个点,5分钟和15分钟差距太大,5分钟要止损,不能加仓, 因为5分钟突破后,上面没有任何压力位,可能会一直上,5分钟,15分钟差距少可以加仓, 5分钟要…

家政服务小程序系统:一站式家政服务解决方案

在数字化浪潮席卷各行业的当下,家政服务领域也迎来了转型升级的契机。这款依托微擎系统打造的家政服务小程序,整合微信与抖音多平台适配能力,以 “专业、贴心、放心” 为核心定位,为家政服务供需双方搭建了高效、透…

OIFHA251009 比赛总结

比赛:OIFHA251009 日期:\(25.10.09\),场地:\(\text{OIFHA}\),排名:\(5/14\) 估分:\(100+40+0+20=160\) 终分:\(100+40+0+20=160\) 应该得分:\(100+100+0+51=251\) 失分 大概有一部分是时间问题,大概又有一部…

二部图,最大权/最小权完美匹配,费用流解法

洛谷p4014 #include<bits/stdc++.h> using namespace std; const int N=120; const int M=N*N+(N<<1); struct edge{int v,c,w,ne;}e[M]; int h[N],id=1; int n,s,t; int p[N][N],pre[N],mf[N],d[N]; bool…

营销农场小程序管理系统:营销吸粉与流量变现解决方案

在数字化营销需求日益增长的当下,“营销农场” 2.0 版本凭借全面升级的功能体系,成为连接线上流量与线下实体的核心工具。它以 “金币闭环玩法” 为核心,整合流量主广告、线下实体对接、分销引流等多元模块,通过微…

2025 滚珠丝杆厂家最新推荐榜单:精密 / 微型 / 重负载全品类适配,国产优质品牌选购指南不锈钢滚珠丝杆/大导程滚珠丝杆/研磨滚珠丝杆/高防尘滚珠丝杆厂家推荐

随着自动化机械、工业机器人及 CNC 设备的高速迭代,滚珠丝杆作为核心传动部件,其精度、耐用性与适配性直接决定设备运行效能。当前市场呈现 “老品牌技术固化、新品牌快速崛起” 的格局,既有深耕多年的头部企业,也…