题意:给出一棵树,求出每个点与距离它最远的点的距离。

  1. /*
  2. 树形DP
  3. 先把无根树转为有根树,对于一个节点i来说,与它相距最远的点有两种可能,一是在它的子树中,二是不在,我们分别用f[i][0]和f[i][1]来表示。
  4. f[i][0]很好求,从子节点向它的父亲递推就可以了。
  5. 关键在于求f[i][1],我们发现f[i][1]可能有两种情况,一是来自它父亲的子树,而是来自它父亲的f[j][1],然后判断一下就好了。
  6. */
  7. #include<iostream>
  8. #include<cstdio>
  9. #include<cstring>
  10. #define N 10010
  11. #define lon long long
  12. using namespace std;
  13. int head[N],vis[N],n,cnt;
  14. lon f[N][];
  15. struct node{int v,w,pre;}e[N*];
  16. void add(int u,int v,int w){
  17. e[++cnt].v=v;e[cnt].w=w;e[cnt].pre=head[u];head[u]=cnt;
  18. e[++cnt].v=u;e[cnt].w=w;e[cnt].pre=head[v];head[v]=cnt;
  19. }
  20. lon dfs1(int u){
  21. vis[u]=;
  22. for(int i=head[u];i;i=e[i].pre){
  23. if(vis[e[i].v]) continue;
  24. f[u][]=max(f[u][],dfs1(e[i].v)+e[i].w);
  25. }
  26. return f[u][];
  27. }
  28. void dfs2(int u){
  29. vis[u]=;
  30. lon max1=,max2=;int v1,v2;
  31. for(int i=head[u];i;i=e[i].pre){
  32. int v=e[i].v,w=e[i].w;
  33. if(vis[v]) continue;
  34. if(f[v][]+w>max1){
  35. max2=max1;v2=v1;
  36. max1=f[v][]+w;v1=v;
  37. }
  38. else if(f[v][]+w>max2){
  39. max2=f[v][]+w;v2=v;
  40. }
  41. }
  42. if(u!=){
  43. if(f[u][]>max1){
  44. max2=max1;v2=v1;
  45. max1=f[u][];v1=-;
  46. }
  47. else if(f[u][]>max2){
  48. max2=f[u][];v2=-;
  49. }
  50. }
  51. for(int i=head[u];i;i=e[i].pre){
  52. int v=e[i].v;
  53. if(vis[v]) continue;
  54. if(v1!=v) f[v][]=max1+e[i].w;
  55. else f[v][]=max2+e[i].w;
  56. dfs2(e[i].v);
  57. }
  58. }
  59. void work(){
  60. for(int u=;u<=n;u++){
  61. int v,w;scanf("%d%d",&v,&w);
  62. add(u,v,w);
  63. }
  64. memset(vis,,sizeof(vis));
  65. dfs1();
  66. memset(vis,,sizeof(vis));
  67. dfs2();
  68. for(int i=;i<=n;i++)
  69. cout<<max(f[i][],f[i][])<<endl;
  70. }
  71. int main(){
  72. freopen("jh.in","r",stdin);
  73. while(scanf("%d",&n)!=EOF){
  74. memset(head,,sizeof(head));
  75. memset(f,,sizeof(f));
  76. cnt=;
  77. work();
  78. }
  79. return ;
  80. }

Computer(hdu 2196)的更多相关文章

  1. BestCoder25 1001.Harry and Magical Computer(hdu 5154) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5154 题目意思:有 n 门 processes(编号依次为1,2,...,n),然后给出 m 种关系: ...

  2. 2道acm编程题(2014):1.编写一个浏览器输入输出(hdu acm1088);2.encoding(hdu1020)

    //1088(参考博客:http://blog.csdn.net/libin56842/article/details/8950688)//1.编写一个浏览器输入输出(hdu acm1088)://思 ...

  3. 树形dp(B - Computer HDU - 2196 )

    题目链接:https://cn.vjudge.net/contest/277955#problem/B 题目大意:首先输入n代表有n个电脑,然后再输入n-1行,每一行输入两个数,t1,t2.代表第(i ...

  4. Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5064 题目意思:给出n个数:a1, a2, ..., an,然后需要从中找出一个最长的序列 b1, b ...

  5. 2013 多校联合 F Magic Ball Game (hdu 4605)

    http://acm.hdu.edu.cn/showproblem.php?pid=4605 Magic Ball Game Time Limit: 10000/5000 MS (Java/Other ...

  6. (多线程dp)Matrix (hdu 2686)

    http://acm.hdu.edu.cn/showproblem.php?pid=2686     Problem Description Yifenfei very like play a num ...

  7. War Chess (hdu 3345)

    http://acm.hdu.edu.cn/showproblem.php?pid=3345 Problem Description War chess is hh's favorite game:I ...

  8. 2012年长春网络赛(hdu命题)

    为迎接9月14号hdu命题的长春网络赛 ACM弱校的弱菜,苦逼的在机房(感谢有你)呻吟几声: 1.对于本次网络赛,本校一共6名正式队员,训练靠的是完全的自主学习意识 2.对于网络赛的群殴模式,想竞争现 ...

  9. BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)

    Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

随机推荐

  1. TI C6000 数据存储处理与性能优化

    存储器之于CPU好比仓库之于车间.车间加工过程中的原材料.半成品.成品等均需入出仓库,生产效率再快,如果仓库周转不善,也必然造成生产阻塞.如同仓库需要合理地规划管理一般,数据存储也需要恰当的处理技巧来 ...

  2. Android Html处理器通用类 HtmlUtil

    1.整体分析 1.1.首先看一下源代码,可以直接Copy. public class HtmlUtil { /** * 获取 html 中的纯文本 */ public static String Ht ...

  3. Spring---资源访问工具类

    JDK所提供的访问资源的类并不能很好的满足各种底层资源的访问需求,因此,Spring设计了一个Resource接口,它为应用提供了更强大的访问底层资源的能力 主要方法 boolean exists() ...

  4. pdo事务

    $pdo->beginTransaction() $pdo->commit() $pdo->rollback();

  5. 大数据服务大比拼:AWS VS. AzureVS.谷歌

    [TechTarget中国原创] 对于企业用户来说,大数据服务是一项较具吸引力的云服务.三大巨头AWS.Azure以及谷歌都在力争夺得头把交椅,但是最后到底是哪一家能够取得王座之战的胜利呢? 云市场正 ...

  6. [转]ANDROID JNI之JAVA域与c域的互操作

    本文讲述AndroidJava域与C域互操作:Java域调用c域的函数:c域访问Java域的属性和方法:c域生成的对象的保存与使用.重点讲解c域如何访问Java域. 虽然AndroidJNI实现中,c ...

  7. java和c/c++

    写c/c++的人,羡慕java可以自己管理内存 写java的人,羡慕c/c++没有gc问题

  8. python之列表/元组/字典/字符串

    一.列表 格式:list = ['xxx','xxx','xxx'] 性质:可以修改列表内容 copy用法: import copy names = ['] names01 = names #直接引用 ...

  9. Python全栈工程师(每周总结:3)

     ParisGabriel                                                           每天坚持 一天一篇 点个订阅吧  灰常感谢    当个死 ...

  10. Ubuntu16.04 问题汇总

    Ubuntu16.04安装wps并解决系统缺失字体问题 http://www.cnblogs.com/liutongqing/p/6388160.html