【HDU2196 Computer】经典树形dp
http://acm.hdu.edu.cn/showproblem.php?pid=2196
题意:有n台电脑相连,让你求每台电脑与离它最远的那台电脑的距离。
思路:两遍搜索即可,第一遍从上到下,第二遍从小往上。对于某点,该点的最长半径为此点离自己孩子的最大距离和父亲节点传递下来的最长距离加连接此点的权值,两者之间选择最大值,但这里处理的时候要注意了,某点的孩子距离和父亲传递下来的最大距离可能为同一路径,因为父亲节点的最大距离可能经过此点。所以在处理的过程中不仅要随时记录最长路径,还要记录一个次长路径。这里WA了几次,更新最长路径的时候,记得要提前把最长路径传递给次长路径。
讲的很绕口。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <vector>
#include <algorithm>
using namespace std; typedef long long lld;
const lld maxn=;
lld fmax[maxn], smax[maxn];
int pre[maxn];
map<int,map<int,int> >mp; struct Node
{
int v, val;
Node(){}
Node(int v_, int val_)
{
v=v_, val=val_;
}
};
vector<Node>vt[maxn]; void dfs(int u)
{
for(int i=; i<vt[u].size(); i++)
{
int v=vt[u][i].v, val=vt[u][i].val;
dfs(v);
if(fmax[v]+val>fmax[u]) smax[u]=fmax[u],fmax[u]=fmax[v]+val; ///这里要注意了,更新fmax的同时要把fmax传递给smax(最大传递给次大)
else if(fmax[v]+val>smax[u]) smax[u]=fmax[v]+val;
}
} void DFS(int u)
{
if(u==) ;
else
{
int fa=pre[u], val=mp[fa][u];
if(fmax[u]==fmax[fa]-val)
{
if(smax[fa]+val>fmax[u]) smax[u]=fmax[u], fmax[u]=smax[fa]+val;
else if(smax[fa]+val>smax[u]) smax[u]=smax[fa]+val;
}
else
{
if(fmax[fa]+val>fmax[u]) smax[u]=fmax[u], fmax[u]=fmax[fa]+val;
else if(fmax[fa]+val>smax[u]) smax[u]=fmax[fa]+val;
}
}
for(int i=; i<vt[u].size(); i++)
DFS(vt[u][i].v);
} int main()
{
int n;
while(cin >> n)
{
mp.clear();
for(int i=; i<=n; i++) fmax[i]=smax[i]=, pre[i]=, vt[i].clear();
for(int i=; i<=n; i++)
{
int u, val;
scanf("%d%d",&u,&val);
vt[u].push_back(Node(i,val));
mp[u][i]=val;
pre[i]=u;
}
dfs();
DFS();
for(int i=; i<=n; i++)
cout << fmax[i] <<endl;
}
return ;
}
/*
8
1 1
1 2
2 2
2 4
3 3
3 4
4 3
*/
【HDU2196 Computer】经典树形dp的更多相关文章
- HDU2196 Computer(树形DP)
和LightOJ1257一样,之前我用了树分治写了.其实原来这题是道经典的树形DP,感觉这个DP不简单.. dp[0][u]表示以u为根的子树中的结点与u的最远距离 dp[1][u]表示以u为根的子树 ...
- hdu2196 Computer【树形DP】【换根法】
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 2196 Computer(经典树形DP)
题意自己看(猜) 题解 这题很经典,就是记录dp[i][0/1/2]分别代表,从i点向下最大和次大深度,和向上最大深度. 然后转移就行了. 我的写法可能太丑了.死活调不出来,写了一个漂亮的 #incl ...
- HDU-2196 Computer (树形DP)
题目大意:在一棵带边权的有根树中,对于每个点,找出它与离它最远的那个点的之间的距离. 题目分析:对于一个点,离它最远的点只有两种情况,一是它到叶子节点的最远距离,一是与它父亲的距离加上他的父亲到叶子节 ...
- SGU 149. Computer Network( 树形dp )
题目大意:给N个点,求每个点的与其他点距离最大值 很经典的树形dp...很久前就想写来着...看了陈老师的code才会的...mx[x][0], mx[x][1]分别表示x点子树里最长的2个距离, d ...
- HDU 1561 The more, The Better 经典树形DP
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 2136:Computer(树形DP)
http://acm.split.hdu.edu.cn/showproblem.php?pid=2196 Computer Description A school bought the fi ...
- hdu 1054 Strategic Game 经典树形DP
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 2196(方法1:经典树形DP+方法2:树的直径)
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
随机推荐
- iphone 数字字段颜色兼容问题
在iphone手机中,有些字段的颜色会自动发生变化,在head中添加如下meta即可.<meta name = "format-detection" content=&quo ...
- hdu1248完全背包
不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前.死亡骑士:"我要买道具!" ...
- css/js(工作中遇到的问题)
移动设备点击时去掉外加的蓝色边框 a, input, button { -webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-tap-highligh ...
- CSS的clip-path
在Web网页中主要是以矩形分布的.而平面媒体则倾向于更多不同的形状.造成这种差异的原因是因为缺少合适的工具去实现我们平面媒体中的内容.这也就造成了很多设计师的创意发挥,就算是有创意,前端实现也将付出巨 ...
- AC自动机 LA 4670 Dominating Patterns
题目传送门 题意:训练指南P216 分析:求出现最多次数的字串,那么对每个字串映射id,cnt记录次数求最大就可以了. #include <bits/stdc++.h> using nam ...
- JSP基础——创建、启动、浏览项目
创建的项目类型为WEB PROJECT. 新建的.JSP文件,可直接访问的放到WebRoot目录下,不可直接访问的就放到WEB-INF里. 要添加的.jar文件,复制到项目目录内,再右键Build P ...
- java中 ==与equals 有什么区别?
1.==既可以比较基本类型变量,又可比较引用类型变量,而equals只能比较引用类型变量: 2.equals方法支持重写,如果未重写equals方法,则比较引用变量时与==都是比较变量所指向的对象地址 ...
- oracle 授权
1.授权oss01用户,此用户可以执行sys.utl_i18n存储过程. grant execute on sys.utl_i18n to oss01;grant execute on sys.dbm ...
- WPF:依赖属性的数据绑定
One of the strengths of WPF is its data binding capabilities. Although data binding is not new (in f ...
- BZOJ3607 : 数据网络
首先答案一定是包含直径某个端点的一个连通块里所有边权值之和,设直径为$AB$,以$A$和$B$分别为根进行处理. 首先按照最长路法则将这棵树进行树链剖分,那么每个叶子的贡献为它与它所在链顶端的点的距离 ...