1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<algorithm>
  5. #include<cstring>
  6. #include<cmath>
  7. #define ll long long
  8. using namespace std;
  9. inline int read()
  10. {
  11. int x=,f=;
  12. char ch=getchar();
  13. while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
  14. while(isdigit(ch)){x=*x+ch-'';ch=getchar();}
  15. return x*f;
  16. }
  17. int n,first[],to[],next[],val[],cnt;
  18. inline void add(int u,int v,int w)
  19. {
  20. to[++cnt]=v;
  21. next[cnt]=first[u];
  22. first[u]=cnt;
  23. val[cnt]=w;
  24. }
  25. int dp[][],depth1[],depth2[];
  26. int dfs1(int x,int fa)
  27. {
  28. for(int i=first[x];i;i=next[i])
  29. {
  30. int v=to[i];
  31. if(v==fa)continue;
  32. dp[x][]=max(dfs(v)+val[i],dp[x][]);
  33. }
  34. return dp[x][];
  35. }
  36. int vis[];
  37. int dfs2(int x,int fav)
  38. {
  39. int max1=,max2=;
  40. int flag1,flag2;
  41. if(vis[x])continue;
  42. for(int i=first[x];i;i=next[i])
  43. {
  44. int v=to[i];
  45. if(vis[v])continue;
  46. int tmp=dp[v][]+val[i];
  47. if(tmp>max1)
  48. {
  49. max2=max1;
  50. max1=tmp;
  51. flag2=flag1;
  52. flag1=v;
  53. }
  54. if(tmp==max1 || tmp>max2)
  55. {
  56. max2=max1;
  57. max1=tmp;
  58. flag2=v;
  59. }
  60. }
  61. if(x!=)
  62. {
  63. int tmp=dp[x][];
  64. int v=-;
  65. if(tmp>max1)
  66. {
  67. max2=max1;
  68. max1=tmp;
  69. flag2=flag1;
  70. flag1=v;
  71. }
  72. if(tmp==max1 || tmp>max2)
  73. {
  74. max2=max1;
  75. max1=tmp;
  76. flag2=v;
  77. }
  78. }
  79. for(int i=first[x];i;i=next[i])
  80. {
  81. int v=to[i];
  82. if(v==flag1)
  83. dp[x][]=max2+val[i];
  84. else dp[x][]=max1+val[i];
  85. dfs2(v,val[i]);
  86. }
  87. }
  88. int main()
  89. {
  90. n=read();
  91. for(int i=;i<n;i++)
  92. {
  93. int u,v,w;
  94. u=read();v=read();w=read();
  95. add(u,v,w);add(v,u,w);
  96. }
  97. dfs1(,-);
  98. }

hdu2196 Computer待续的更多相关文章

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

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

  2. 【HDU2196 Computer】经典树形dp

    http://acm.hdu.edu.cn/showproblem.php?pid=2196 题意:有n台电脑相连,让你求每台电脑与离它最远的那台电脑的距离. 思路:两遍搜索即可,第一遍从上到下,第二 ...

  3. HDU2196 Computer(树形DP)

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

  4. HDU-2196 Computer (树形DP)

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

  5. HDU2196 - Computer(树形DP)

    题目大意 给定一颗n个结点的树,编号为1~n,要求你求出每个结点能到达的最长路径 题解 用动态规划解决的~~~~把1 当成树根,这样就转换成有根树了.我们可以发现,对于每个结点的最长路,要么是从子树得 ...

  6. [hdu2196]Computer树的直径

    题意:求树中距离每个节点的最大距离. 解题关键:两次dfs,第一次从下向上dp求出每个节点子树中距离其的最大距离和不在经过最大距离上的子节点上的次大距离(后序遍历),第二次从上而下dp求出其从父节点过 ...

  7. [HDU2196]Computer(DP)

    传送门 题意 给出一棵树,求离每个节点最远的点的距离 思路 对于我这种菜鸡,真是难啊. 每个点的距离它最远的点,除了在它子树中的,还有在它子树之外的,所以这几个状态都得表示出来. 我们能够很简单的求出 ...

  8. HDU2196 Computer【换根dp】

    题目传送门 题意: 给定一个$N$个点的树,第$i$条边的长度是$A_i$,求每个点到其他所有点的最长距离.数据范围:$n ≤ 10000$,$A_i ≤ 10_9$ 分析 首先,从随便哪个节点($1 ...

  9. HDU2196 Computer (树形DP-换根)

    dp[u][0]表示u向下走的最大距离: dp[u][1]表示u向下走的次大距离: dp[u][2]表示u向上走的最大距离: 最后的答案就是每个点的max(dp[u][0],dp[u][2]); 求解 ...

随机推荐

  1. ios __block typeof 编译错误解决

    type specifier missing a parameter list without types is only allowed in a function definition 解决: 工 ...

  2. Android自定义属性format类型

    1. reference:参考某一资源ID. (1)属性定义: <declare-styleable name = "名称"> <attr name = &quo ...

  3. SQLServer判断一个IP是否在一个IP段里

    declare @ip1 varchar(20)declare @ip2 varchar(20)set @ip1='221.231.138.101'set @ip2='255.255.255.255' ...

  4. Mysql 学习1

      Mysql学习   一.数据库   1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: 可存储大量数据: 方便检索: 保持数据的一致性.完整 ...

  5. perl智能匹配

    1.perl中~~为智能匹配,它能够智能地依据符号两側的操作数来确定操作. 如要推断某个元素是否存在于数组中,不使用智能匹配,程序像这样: my $x=2; my @array=(1,2,3); my ...

  6. wap网站即手机端网页SEO优化注意事项及方法

    定位和页面设计: 无论是PC端还是移动端,网站 都要考虑清楚消费群体的定位问题.虽然智能手机用户数量非常普及,但是要明白中国的大部分手机用户使用的还是2G网络,一直高 喊的3G.4G手机用户只有大约1 ...

  7. Visual Studio 2017 扩展推荐

    ReSharper : 首先的是Resharper,这个基本是目前是我开发过程中必备的工具集,唯一的缺点就是吃内存,所以你的内存要是低于8G,就不要使用它了.它的特点可以快速重构.高亮显示错误.导航和 ...

  8. path.join()和path.resolve()区别

    一.区别 1.path.join() 方法使用平台特定的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径. 2.path.resolve() 方法将路径或路径片段的序列解析 ...

  9. uboot 2013.01 代码简析(3)第二阶段初始化

    u-boot第二阶段初始化内容的入口函数是_main,_main位于arch/arm/lib/crt0.S文件中: _main函数中先为调用board_init_f准备初始化环境(设置栈指针sp和并给 ...

  10. mini2440移植uboot 2014.04(三)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文档: s3c2440手册(下载地址) ...