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的更多相关文章

  1. HDU2196 Computer(树形DP)

    和LightOJ1257一样,之前我用了树分治写了.其实原来这题是道经典的树形DP,感觉这个DP不简单.. dp[0][u]表示以u为根的子树中的结点与u的最远距离 dp[1][u]表示以u为根的子树 ...

  2. hdu2196 Computer【树形DP】【换根法】

    Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. HDU 2196 Computer(经典树形DP)

    题意自己看(猜) 题解 这题很经典,就是记录dp[i][0/1/2]分别代表,从i点向下最大和次大深度,和向上最大深度. 然后转移就行了. 我的写法可能太丑了.死活调不出来,写了一个漂亮的 #incl ...

  4. HDU-2196 Computer (树形DP)

    题目大意:在一棵带边权的有根树中,对于每个点,找出它与离它最远的那个点的之间的距离. 题目分析:对于一个点,离它最远的点只有两种情况,一是它到叶子节点的最远距离,一是与它父亲的距离加上他的父亲到叶子节 ...

  5. SGU 149. Computer Network( 树形dp )

    题目大意:给N个点,求每个点的与其他点距离最大值 很经典的树形dp...很久前就想写来着...看了陈老师的code才会的...mx[x][0], mx[x][1]分别表示x点子树里最长的2个距离, d ...

  6. 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 ...

  7. HDU 2136:Computer(树形DP)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=2196 Computer     Description A school bought the fi ...

  8. hdu 1054 Strategic Game 经典树形DP

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. hdu 2196(方法1:经典树形DP+方法2:树的直径)

    Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

随机推荐

  1. 词法分析 after Coding

    学习词法分析,认为词法分析很难. 虽然不懂,但是要完成作业. 去图书馆或者看书借鉴代码,修改错误,让代码正常运行. 学习词法分析后,了解到自己有很多的不足: 1.代码不是很熟练,课本知识不了解.知识面 ...

  2. 在MySQL中存储大文件

    我们的目标:把一首mp3保存到MySQL数据库中! 由于MySQL默认当存入的数据太大时会抛异常,所以应在my.ini中添加如下配置!max_allowed_packet=10485760,这样,可以 ...

  3. Android Studio在导入eclipse的项目时一直卡在gradle:Configure project

    学Java的时候用的是eclipse,写android代码的时候用了疯狂android讲义推荐的AS.在用AS的时候出了很多问题,比如我想从别人那里拷贝eclipse写的工程的时候就遇到了Gradle ...

  4. 【转】Linux IO实时监控iostat命令详解

    转自:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858810.html 简介 iostat主要用于监控系统设备的IO负载情况,iosta ...

  5. POJ 3450 后缀数组/KMP

    题目链接:http://poj.org/problem?id=3450 题意:给定n个字符串,求n个字符串的最长公共子串,无解输出IDENTITY LOST,否则最长的公共子串.有多组解时输出字典序最 ...

  6. sql server 2008 跨服务器查询

    exec sp_addlinkedserver 'ITSV','','SQLOLEDB','192.168.202.53' exec sp_addlinkedsrvlogin 'ITSV','fals ...

  7. iOS App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.

    You can easily add it to the plist using the GUI: On the last line add the + Enter the name of the g ...

  8. Spring3.0 demo (注解自动注入)

    这个demo是maven工程,目录结构如下 pom.xml maven依赖 .....省略 <dependency> <groupId>org.springframework& ...

  9. jquery上传文件控件Uploadify

    基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. 要求使用jquery1.4或以上版本,flash player 9.0.24以上. 有两个 ...

  10. WPF画线问题,几千条以后就有明显的延迟了。

      我现在是这么画的,class A { private GeometryGroup _lines; private Path _path; public A() {    _path.Data = ...