HDU2196 Computer (树形DP-换根)
dp[u][0]表示u向下走的最大距离;
dp[u][1]表示u向下走的次大距离;
dp[u][2]表示u向上走的最大距离;
最后的答案就是每个点的max(dp[u][0],dp[u][2]);
求解次大距离并记录idx在求解向上最大距离中是有必要的,可以画图分析。
1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4 using namespace std;
5 const int MAXN=10000+10;
6 int dp[MAXN][3];
7 int idx[MAXN];//用来记录u往下的最大距离经过哪个子节点
8 struct Edge{
9 int v,w,next;
10 }edge[MAXN<<1];
11 int cnt,head[MAXN];
12
13 void add(int u,int v,int w){
14 edge[cnt].v=v;
15 edge[cnt].w=w;
16 edge[cnt].next=head[u];
17 head[u]=cnt++;
18 }
19
20 void dfs1(int u,int fa){
21 int mx1=0,mx2=0;
22 for(int i=head[u];~i;i=edge[i].next){
23 int v=edge[i].v;
24 if(v==fa) continue;
25 dfs1(v,u);
26 int c=dp[v][0]+edge[i].w;
27 if(mx1<=c) mx2=mx1,mx1=c,idx[u]=v;
28 else if(mx2<c) mx2=c;
29 }
30 dp[u][0]=mx1;//向下走的最大值
31 dp[u][1]=mx2;//向下走的次大值
32 }
33
34 void dfs2(int u,int fa){//求u向上可以走的最大值
35 for(int i=head[u];~i;i=edge[i].next){
36 int v=edge[i].v;
37 if(v==fa) continue;
38 if(idx[u]==v)
39 dp[v][2]=max(dp[u][1],dp[u][2])+edge[i].w;
40 else
41 dp[v][2]=max(dp[u][0],dp[u][2])+edge[i].w;
42 dfs2(v,u);
43 }
44 }
45
46 int main(){
47 int n,a,b;
48 while(~scanf("%d",&n)){
49 cnt=0;
50 memset(head,-1,sizeof(head));
51 for(int i=2;i<=n;i++){
52 scanf("%d%d",&a,&b);
53 add(i,a,b);add(a,i,b);
54 }
55 memset(dp,0,sizeof(dp));
56 dfs1(1,1);
57 dfs2(1,1);
58 for(int i=1;i<=n;i++)
59 printf("%d\n",max(dp[i][0],dp[i][2]));
60 }
61 return 0;
62 }
HDU2196 Computer (树形DP-换根)的更多相关文章
- bzoj 3743 [Coci2015]Kamp——树形dp+换根
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3743 树形dp+换根. “从根出发又回到根” 减去 “mx ” . 注意dfsx里真的要改那 ...
- 树形dp换根,求切断任意边形成的两个子树的直径——hdu6686
换根dp就是先任取一点为根,预处理出一些信息,然后在第二次dfs过程中进行状态的转移处理 本题难点在于任意割断一条边,求出剩下两棵子树的直径: 设割断的边为(u,v),设down[v]为以v为根的子树 ...
- poj3585 Accumulation Degree(树形dp,换根)
题意: 给你一棵n个顶点的树,有n-1条边,每一条边有一个容量z,表示x点到y点最多能通过z容量的水. 你可以任意选择一个点,然后从这个点倒水,然后水会经过一些边流到叶节点从而流出.问你最多你能倒多少 ...
- poj3585 Accumulation Degree[树形DP换根]
思路其实非常简单,借用一下最大流求法即可...默认以1为根时,$f[x]$表示以$x$为根的子树最大流.转移的话分两种情况,一种由叶子转移,一种由正常孩子转移,判断一下即可.换根的时候由頂向下递推转移 ...
- [题解](树形dp/换根)小x游世界树
2. 小x游世界树 (yggdrasi.pas/c/cpp) [问题描述] 小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据说那里埋藏着亚瑟王的宝藏,这引起了小x的好奇,但当 ...
- HDU2196 - Computer(树形DP)
题目大意 给定一颗n个结点的树,编号为1~n,要求你求出每个结点能到达的最长路径 题解 用动态规划解决的~~~~把1 当成树根,这样就转换成有根树了.我们可以发现,对于每个结点的最长路,要么是从子树得 ...
- computer(树形dp || 树的直径)
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 2196 Computer 树形DP 经典题
给出一棵树,边有权值,求出离每一个节点最远的点的距离 树形DP,经典题 本来这道题是无根树,可以随意选择root, 但是根据输入数据的方式,选择root=1明显可以方便很多. 我们先把边权转化为点权, ...
- HDU 2196.Computer 树形dp 树的直径
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 2196 Computer 树形DP经典题
链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...
随机推荐
- super和访问权限修饰符
super()方法 构造方法中的super关键字 在java子类的构造方法中可以通过super关键字来调用父类的构造方法 super():访问父类中的无参构造函数 super(...)访问父类中的成员 ...
- java 向上,向下取整详解
向上取整函数:Math.ceil(double a); 向下取整函数:Math.floor(double a); 需要注意的是:取整是对小数的取整,由于java自动转型机制,两个整数的运算结果依然是整 ...
- md文档使用小技巧
简介 在日常写readme文档中,可能会遇到一些小问题,此处记录一下md文档编写过程中的一些小技巧. 插入图片 在md文档中插入图片,目前有三种方式,本地导入.网络导入.base64导入. 本地导入 ...
- linux安全之网络设置
可以通过/etc/sysctl.conf控制和配置Linux内核及网络设置. # 避免放大攻击 net.ipv4.icmp_echo_ignore_broadcasts = 1 # 开启恶意icmp错 ...
- WPF主窗体调用 User32的SetWindowPos 设置窗体置顶会导致与其他窗体抢夺焦点的问题
最近发现:自己开发的窗体应用,在二级弹窗或者提示框弹出的时候,交替点击窗体和窗体外(相当于窗体交替的获取焦点和失去焦点),都会导致其他的应用一闪一闪的. 经过排查,是由于该窗体由于部分因素考虑,用了 ...
- java基础Synchronized关键字之对象锁
java中Synchronized关键字之对象锁 当有多个线程对一个共享数据进行操作时,需要注意多线程的安全问题. 多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同 ...
- gcd(数论)
题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对? 输入 一个整数 1<=N<=1000000 输出 一个整数 样例输入 4 样例输出 ...
- ServletFileUpload 文件上传
import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadExcepti ...
- Filter(过滤器)、ThreadLocal(本地线程)、Listener(监听器)
Filter(过滤器) Filter过滤器它的作用是:拦截请求,过滤响应. 过滤器链 1)执行的顺序依次是: A B C Demo03 C2 B2 A2 2)如果采取的是注解的方式进行配置,那么过滤器 ...
- 「题解报告」P7301 【[USACO21JAN] Spaced Out S】
原题传送门 神奇的5分算法:直接输出样例. 20分算法 直接把每个点是否有牛的状态DFS一遍同时判断是否合法,时间复杂度约为\(O(2^{n^2})\)(因为有判断合法的剪枝所以会比这个低).而在前四 ...