思路:先求以1为根时,每个节点到子节点的最大长度。然后再次从1进入进行更新。

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #include<vector>
  6. #define Maxn 20010
  7. #define inf 0x7fffffff
  8. using namespace std;
  9. int vi[Maxn],si[Maxn],n,road[Maxn],Max[Maxn],lMax[Maxn],head[Maxn],e;
  10. struct Edge{
  11. int u,v,val,next;
  12. }edge[Maxn*];
  13. void init()
  14. {
  15. memset(vi,,sizeof(vi));
  16. memset(si,,sizeof(si));
  17. memset(road,,sizeof(road));
  18. memset(Max,,sizeof(Max));
  19. memset(lMax,,sizeof(lMax));
  20. memset(head,-,sizeof(head));
  21. e=;
  22. }
  23. void add(int u,int v,int val)
  24. {
  25. edge[e].u=u,edge[e].v=v,edge[e].val=val,edge[e].next=head[u],head[u]=e++;
  26. edge[e].u=v,edge[e].v=u,edge[e].val=val,edge[e].next=head[v],head[v]=e++;
  27. }
  28. int dfs(int u)
  29. {
  30. int i,v,sz;
  31. vi[u]=;
  32. for(i=head[u];i!=-;i=edge[i].next)
  33. {
  34. v=edge[i].v;
  35. if(vi[v]) continue;
  36. int temp=dfs(v);
  37. if(temp+edge[i].val>Max[u])
  38. {
  39. lMax[u]=Max[u];
  40. Max[u]=temp+edge[i].val;
  41. road[u]=v;
  42. }
  43. else if(temp+edge[i].val>lMax[u])
  44. lMax[u]=temp+edge[i].val;
  45. }
  46. return Max[u];
  47. }
  48. void update(int u,int val)
  49. {
  50. int i,v,sz;
  51. vi[u]=;
  52. for(i=head[u];i!=-;i=edge[i].next)
  53. {
  54. v=edge[i].v;
  55. if(vi[v]) continue;
  56. if(road[u]==v) update(v,max(val,lMax[u])+edge[i].val);
  57. else update(v,max(Max[u],val)+edge[i].val);
  58. }
  59. Max[u]=max(Max[u],val);
  60. }
  61. int main()
  62. {
  63. int i,j,a,b;
  64. while(scanf("%d",&n)!=EOF)
  65. {
  66. init();
  67. for(i=;i<=n;i++){
  68. scanf("%d%d",&a,&b);
  69. add(i,a,b);
  70. }
  71. dfs();
  72. memset(vi,,sizeof(vi));
  73. update(,);
  74. for(i=;i<=n;i++)
  75. printf("%d\n",Max[i]);
  76. }
  77. return ;
  78. }

hdu 2196 树形dp的更多相关文章

  1. HDU 2196树形DP(2个方向)

    HDU 2196 [题目链接]HDU 2196 [题目类型]树形DP(2个方向) &题意: 题意是求树中每个点到所有叶子节点的距离的最大值是多少. &题解: 2次dfs,先把子树的最大 ...

  2. HDU 2196 树形DP Computer

    题目链接:  HDU 2196 Computer 分析:   先从任意一点开始, 求出它到其它点的最大距离, 然后以该点为中心更新它的邻点, 再用被更新的点去更新邻点......依此递推 ! 代码: ...

  3. hdu 4123 树形DP+RMQ

    http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...

  4. HDU 1520 树形dp裸题

    1.HDU 1520  Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> ...

  5. HDU 1561 树形DP入门

    The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  6. HDU 1520 树形DP入门

    HDU 1520 [题目链接]HDU 1520 [题目类型]树形DP &题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知 ...

  7. codevs 1380/HDU 1520 树形dp

    1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ...

  8. HDU 5834 [树形dp]

    /* 题意:n个点组成的树,点和边都有权值,当第一次访问某个点的时候获得利益为点的权值 每次经过一条边,丢失利益为边的权值.问从第i个点出发,获得的利益最大是多少. 输入: 测试样例组数T n n个数 ...

  9. hdu 4267 树形DP

    思路:先dfs一下,找出1,n间的路径长度和价值,回溯时将该路径长度和价值清零.那么对剩下的图就可以直接树形dp求解了. #include<iostream> #include<al ...

随机推荐

  1. redis神器

    redis是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存. redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上. ...

  2. SQL 错误1418

    1.一个或多个服务器网络地址缺少完全限定域名(FQDN).为每个服务器指定FQDN,然后再次单击“开始镜像”.2.服务器网络地址"TCP://primary.test.com:5022&qu ...

  3. .NET通用权限系统快速开发框架

    DEMO下载地址: http://download.csdn.net/detail/shecixiong/5372895 一.开发技术:B/S(.NET C# ) 1.Windows XP以上 (支援 ...

  4. PC/UVa 题号: 110106/10033 Interpreter (解释器)题解 c语言版

    , '\n'); #include<cstdio> #include<iostream> #include<string> #include<algorith ...

  5. [小技巧]設定Reporting Services 2008 發生報表管理員權限不足

    转载 http://www.dotblogs.com.tw/dorlis.tsao/archive/2011/01/17/20860.aspx 在自己Windows 7 professional的電腦 ...

  6. Html+jquery mobile

    打开VS 2013,选择[文件]-[新建]-[项目] 选择框架为.NET Framework4-[ASP.NET MVC4 Web应用程序],点击[确定] 选择[基本],点击[确定] 创建的MVC的项 ...

  7. SAP标准教材列表

    AC010 mySAP Financials Overview to Financial Accounting and ReportingAC020 mySAP Financials Investme ...

  8. Splash and Wizard

    https://github.com/xcz1899/AndroidGuide https://github.com/w446108264/XhsWelcomeAnim https://github. ...

  9. hive-0.10.0-cdh4.3.0安装

    1.我使用的Hadoop2.0-cdh4.3.0,相应hive配套版本号hive-0.10.0-cdh4.3.0.    2.改动hive/conf下hive-site.xml文件,无则创建hive- ...

  10. 【linux设备模型】之platform设备驱动

    一.platform总线.设备和驱动     platform是一种虚拟总线,对应的设备称为platform_device,对应的驱动称为platform_driver. platform_devic ...