链接:https://ac.nowcoder.com/acm/contest/18072/A

牛妹有一张连通图,由n个点和n-1条边构成,也就是说这是一棵树,牛妹可以任意选择一个点为根,根的深度为0,对于任意一个非根的点,我们将他到根节点路径上的第一个点称作他的父节点,例如1为根,1-4的;路径为1-3-5-4时,4的父节点是5,并且满足对任意非根节点,,整棵树的价值,即所有点的深度和

牛妹希望这棵树的W最小,请你告诉她,选择哪个点可以使W最小

题目:求树所有节点的深度累加的最小值(选择一个点为根)

思路:根据重心的定义,可以求出重心,直接以重心为根。

还有换根dp:先求出以1为根的答案,考虑x->y,dp[y]=dp[u]-son[y]+n-son[y];

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <cstdlib>
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define re register
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(a) ((a)&-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define rep(i,n) for(int i=0;(i)<(n);i++)
#define rep1(i,n) for(int i=1;(i)<=(n);i++)
#define se second
#define scd(a) scanf("%d",&a)
#define scdd(a,b) scanf("%d%d",&a,&b)
#define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define ac cout<<ans<<"\n"
#define F(x) ((x)/3+((x)%3==1?0:tb))
#define G(x) ((x)<tb?(x)*3+1:((x)-tb)*3+2)
using namespace std;
typedef long long  ll;
typedef unsigned long long  ull;
typedef pair<ll,ll> pii;
int dx[4]= {-1,1,0,0},dy[4]= {0,0,1,-1};
const ll mod=1e9+7;
const ll N =1e6+10;
const double eps = 1e-4;
//const double pi=acos(-1);int n;
vector<int> g[N];
int dis[N];
int son[N];
int sum,ans;
int dp[N];
void dfs1(int u,int f){son[u]=1;dis[u]=dis[f]+1;for(int v:g[u]){if(v==f) continue;dfs1(v,u);son[u]+=son[v];}sum+=(dis[u]-1);
}
void dfs_dp(int u,int f){for(int v:g[u]){if(v==f) continue;dp[v]=dp[u]-son[v]+n-son[v];dfs_dp(v,u);}ans=min(ans,dp[u]);
}
int main()
{iosans=inf;cin>>n;for(int i=1;i<=n-1;i++){int x,y;cin>>x>>y;g[x].push_back(y);g[y].push_back(x);}dfs1(1,0);dp[1]=sum;ans=dp[1];dfs_dp(1,0);cout<<ans;
}

换根dp求树所有节点的最小深度相关推荐

  1. 2020牛客多校第一场B虚树+质数筛+换根dp

    题目大意: 1.可以发现阶乘增长是很快的所以你要把整颗树建立出来是不实际的. 2.我们可以假设这棵树已经建出来出来了我们应该怎么搞 首先很明显是一个树形dp, 我们设dp[j],是以j为u到其他点距离 ...

  2. 洛谷 - P4323 [JSOI2016]独特的树叶(树上哈希+换根dp)

    题目链接:点击查看 题目大意:给出一棵 n 个节点的树 A ,再给出一棵 n + 1 个节点的树 B,题目保证了树 B 是树 A 添加了一个叶子结点后的一棵树,只不过编号的顺序不同,现在问这个叶子节点 ...

  3. 牛客多校1 - Infinite Tree(虚树+换根dp+树状数组)

    题目链接:点击查看 题目大意:给出一个无穷个节点的树,对于每个大于 1 的点 i 来说,可以向点 i / minvid[ i ] 连边,这里的 mindiv[ x ] 表示的是 x 的最小质因数,现在 ...

  4. 2019长沙学院新生赛(A水,B水,C(整除分块),D水,E(巧数学),F(二分+bfs),H(换根dp),I(线段树)J(dp+倍增+lca))

    A-XOR SUM 通过简单观察得知连续四个数的异或值就是等于0,暴力找出左区间和右区间就可以了,最多跑四个单位 0^1^2^3==0   4^5^6^7=0 #include<bits/std ...

  5. 小G砍树 (换根dp)

    小G砍树 给你一棵n个节点的带标号无根树.每次,你可以选择一个度数为1的节点并将它从树上移除.问总共有多少种不同的方式能将这棵树删到只剩 1 个点.两种方式不同当且仅当至少有一步被删除的节点不同. 思 ...

  6. [BZOJ4379][POI2015]Modernizacja autostrady[树的直径+换根dp]

    题意 给定一棵 \(n\) 个节点的树,可以断掉一条边再连接任意两个点,询问新构成的树的直径的最小和最大值. \(n\leq 5\times 10^5\) . 分析 记断掉一条边之后两棵树的直径为 \ ...

  7. 树形dp ---- 树形换根dp F - The Maximum Subtree

    题目链接 题目大意: 给定一颗树,求这个树的最大子树,且这个子树是一个good-tree. good-tree的定义是:每个节点可以表示成一个数值区间,而树上的边表示两个点表示的数值区间相交 解题思路 ...

  8. 树形(dp+换根dp)

    普通树形dp 树形dp通常围绕根节点来写状态转移方程 用一道基础的树形dp例题来具体分析: 没有上司的舞会 Ural 大学有 N 名职员,编号为 1∼N. 他们的关系就像一棵以校长为根的树,父节点就是 ...

  9. 树上子链(树形dp求树的直径)

    树上子链 题意: 给定一棵树 T ,树 T 上每个点都有一个权值. 定义一颗树的子链的大小为:这个子链上所有结点的权值和 . 请在树 T 中找出一条最大的子链并输出. 题解: 求树的直径,题目中存在负 ...

最新文章

  1. mysql5.7.13.zip安装(windows)
  2. 1.21 Lambda表达式
  3. 那些值得思考的PHP问题
  4. 来吧学学.Net Core之项目文件简介及配置文件与IOC的使用
  5. nodemanager_如何使用NodeManager来控制WebLogic Server
  6. 无向图的深度优先遍历非递归_LeetCode0429: N叉树的层序遍历
  7. 从实际业务中来,到落地业务建模中去
  8. Bootstrap 分页导航中的翻页组件
  9. 创建WPF单实例应用程序
  10. 微信小程序/js上传图片值腾讯云cos
  11. 网络电视机顶盒的工作原理
  12. C#如何在EPPlus中冻结首行,冻结Excel首行
  13. FlashFXP,flashfxp怎么连接服务器
  14. Java使用Lambda表达式多字段求和
  15. 接着奏乐接着舞 Matlab制作圣诞树和圣诞快乐歌
  16. 43. 盘点那些必问的数据结构算法题之二叉树基础
  17. 浅谈统计检验效能和FDR
  18. 2022.12.5-12.11 AI行业周刊(第127期):一起做时间的朋友
  19. Java实现 谁不爱打牌
  20. IMX6UL平台设计之初

热门文章

  1. 阿基米德椭圆规原理,你看懂了吗?
  2. 来潮汕,这些食物不吃后悔一辈子...
  3. 吐血整理!近二十年全国数学联赛赛题大全,烧脑全集来啦!
  4. 盘点那些让程序员目瞪口呆的Bug都有什么?
  5. angular的html引入js,在AngularJS中的文件夹中加载JavaScript和CSS文件
  6. java ready_Java PushbackReader ready()用法及代码示例
  7. 启动ipython内核发生错误_ipython3启动
  8. requestmapping注解访问404_【框架】127:几个非常重要的注解
  9. 东北大学计算机 大一物理考试题,东北大学大学物理期末考题及答案Word版
  10. 在数组中找重复数、只出现一次的数或丢失数的题目(Leetcode题解-Python语言)