博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 3949 (17th 浙大校赛 B题,树型DP)
阅读量:5462 次
发布时间:2019-06-16

本文共 1520 字,大约阅读时间需要 5 分钟。

题目链接  

题意  给定一棵树,现在要加一条连接$1$(根结点)和$x$的边,求加了这条边之后,所有点到根结点的距离的和的最小值。

    输出这个最小值即可。

 

当加的这条边为$1-x$时,$x$和$1$的中点及以下的所有点到根结点的距离都发生了变化,其他点都没有发生改变。

现在设$ans[i]$表示当加的这条边为$1-x$时的答案,考虑答案从某个点转移到他的儿子。

首先树型DP预处理出$ans[1]$。

当$x$为$1$的儿子的时候,这时加的边为重边,所以$ans[x] = ans[1]$。

在处理的时候设$c[dep]$为当前深度为$dep$的点。

其他时候,令$x$和$1$的中点为$u$,这个时候$x$和$x$的父亲相比,以$u$为根的子树这个部分到$1$的距离要加$1$(更远了)。

但是有一部分的点例外,那就是以$x$为根的子树,直接通过$x$到$1$,而不是通过$x$的父亲到$1$。

所以考虑刚刚加的$1$,这一部分的值要减$2$。

时间复杂度$O(n)$

 

#include 
using namespace std;#define rep(i, a, b) for (int i(a); i <= (b); ++i)#define dec(i, a, b) for (int i(a); i >= (b); --i)typedef long long LL;const int N = 2e5 + 10;int T, n;int sz[N], deep[N];int c[N];LL f[N];LL ans[N], all, ret;vector
v[N];void dfs(int x, int fa, int dep){ sz[x] = 1; f[x] = 0; deep[x] = dep; for (auto u : v[x]){ if (u == fa) continue; dfs(u, x, dep + 1); sz[x] += sz[u]; f[x] += 0ll + f[u] + sz[u]; }}void solve(int x, int fa, int dep){ for (auto u : v[x]){ if (u == fa) continue; c[dep] = u; if (deep[u] >= 2) ans[u] = ans[x] + sz[c[dep / 2 + 1]] - 2 * sz[u]; else ans[u] = ans[x]; solve(u, x, dep + 1); }} int main(){ scanf("%d", &T); while (T--){ scanf("%d", &n); rep(i, 0, n + 1) v[i].clear(); rep(i, 2, n){ int x, y; scanf("%d%d", &x, &y); v[x].push_back(y); v[y].push_back(x); } dfs(1, 0, 0); ans[1] = f[1]; c[0] = 0; solve(1, 0, 1); ret = ans[1]; rep(i, 2, n) ret = min(ret, ans[i]); printf("%lld\n", ret); } return 0;}

 

  

 

转载于:https://www.cnblogs.com/cxhscst2/p/8508676.html

你可能感兴趣的文章
PHP变量测试函数
查看>>
第六天 基本文件管理与XFS文件系统备份恢复
查看>>
win10中强制vs2015使用管理员启动
查看>>
UISerachBar / UISearchDisplayController
查看>>
Linux常用的操作命令
查看>>
Redis Desktop Manager
查看>>
css书写规范
查看>>
Asp.net +Jquery-uploadify多文件上传
查看>>
【恐怖的数组模拟】Secret Poems - HihoCoder - 1632
查看>>
大规模机器学习
查看>>
EasyPlayerPro(Windows)流媒体播放器开发之接口设计
查看>>
寻找数组中子数组和的最大值
查看>>
如何系统的进入大数据领域,学习路线是什么?
查看>>
COLLATE Chinese_PRC_CI_AS
查看>>
PHP中面对过程的冗余是什么?
查看>>
函数----函数重载,特殊用途语言特性,函数匹配,函数指针
查看>>
Hive数据查询
查看>>
在vue2框架中,使用背景图片时,在build压缩代码环节图片找不到路径
查看>>
[转]android中最好的瀑布流控件PinterestLikeAdapterView
查看>>
算法面经之百度
查看>>