Description


Input

第一行是两个整数N(3  N  200000)和M,分别表示居住点总数和街道总数。以下M行,每行给出一条街道的信息。第i+1行包含整数Ui、Vi、Ti(1Ui, Vi  N,1  Ti  1000000000),表示街道i连接居住点Ui和Vi,并且经过街道i需花费Ti分钟。街道信息不会重复给出。
Output

仅包含整数T,即最坏情况下Chris的父母需要花费T分钟才能找到Chris。
Sample Input

4 3

1 2 1

2 3 1

3 4 1

Sample Output

4

树dp

其实不是很难,只是要小心细节

我们要找出一个三叉路(允许一条为0)从大到小为a,b,c,使得a+b+b+c最大

所以我们先树dp求出每个点往下走的最长的三条边,但是这条边还可能来自于父亲,所以再dfs一遍,然后更新答案

  1. const
  2. maxn=;
  3. var
  4. first,u:array[..maxn]of longint;
  5. next,last,w:array[..maxn*]of longint;
  6. f:array[..maxn,..]of int64;
  7. n,m,tot:longint;
  8. ans:int64;
  9.  
  10. procedure insert(x,y,z:longint);
  11. begin
  12. inc(tot);
  13. last[tot]:=y;
  14. next[tot]:=first[x];
  15. first[x]:=tot;
  16. w[tot]:=z;
  17. end;
  18.  
  19. procedure up(var x:int64;y:int64);
  20. begin
  21. if x<y then x:=y;
  22. end;
  23.  
  24. procedure new(x:longint;y:int64);
  25. begin
  26. if y>f[x,] then
  27. begin
  28. f[x,]:=f[x,];
  29. f[x,]:=f[x,];
  30. f[x,]:=y;
  31. end
  32. else
  33. if y>f[x,] then
  34. begin
  35. f[x,]:=f[x,];
  36. f[x,]:=y;
  37. end
  38. else up(f[x,],y);
  39. end;
  40.  
  41. procedure dfs(x,fa:longint);
  42. var
  43. i:longint;
  44. begin
  45. i:=first[x];
  46. while i<> do
  47. begin
  48. if last[i]<>fa then
  49. begin
  50. dfs(last[i],x);
  51. u[last[i]]:=w[i];
  52. new(x,f[last[i],]+w[i]);
  53. end;
  54. i:=next[i];
  55. end;
  56. end;
  57.  
  58. function get(x,y,z:int64):int64;
  59. begin
  60. exit(x+y*+z);
  61. end;
  62.  
  63. procedure dfs2(x,fa:longint);
  64. var
  65. i:longint;
  66. begin
  67. if f[x,]+u[x]=f[fa,] then new(x,f[fa,]+u[x])
  68. else new(x,f[fa,]+u[x]);
  69. up(ans,get(f[x,],f[x,],f[x,]));
  70. i:=first[x];
  71. while i<> do
  72. begin
  73. if last[i]<>fa then dfs2(last[i],x);
  74. i:=next[i];
  75. end;
  76. end;
  77.  
  78. procedure main;
  79. var
  80. i,x,y,z:longint;
  81. begin
  82. read(n,m);
  83. for i:= to m do
  84. begin
  85. read(x,y,z);
  86. insert(x,y,z);
  87. insert(y,x,z);
  88. end;
  89. dfs(,);
  90. dfs2(,);
  91. write(ans);
  92. end;
  93.  
  94. begin
  95. main;
  96. end.

1509: [NOI2003]逃学的小孩 - BZOJ的更多相关文章

  1. BZOJ 1509: [NOI2003]逃学的小孩( 树形dp )

    树形dp求出某个点的最长3条链a,b,c(a>=b>=c), 然后以这个点为交点的最优解一定是a+2b+c.好像还有一种做法是求出树的直径然后乱搞... ----------------- ...

  2. BZOJ 1509: [NOI2003]逃学的小孩

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1509 直接求出树的直径,枚举每个点更新一遍答案. #include<cstring> ...

  3. 【BZOJ1509】[NOI2003]逃学的小孩 直径

    [BZOJ1509][NOI2003]逃学的小孩 Description Input 第一行是两个整数N(3  N  200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的 ...

  4. [NOI2003]逃学的小孩(树的直径)

    [NOI2003]逃学的小孩 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:"喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?"一听 ...

  5. BZOJ1509 & 洛谷4408:[NOI2003]逃学的小孩——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1509 https://www.luogu.org/problemnew/show/P4408 sb ...

  6. 洛谷 P4408 [NOI2003]逃学的小孩

    题目传送门 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:“喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?”一听说要考试,Chris的父母就心急如焚, ...

  7. NOI2003 逃学的小孩

    这一题不会做啊…… 我觉得真要比赛的话我可能会随机上几万次,然后再用LCA求距离,更新最优值,等到快超时的时候输出答案…… 题解请看2007年陈瑜希论文 代码: ; type node=record ...

  8. 解题报告 『[NOI2003]逃学的小孩(树上操作)』

    原题地址 今天翻看集训队巨佬写的一篇有关于树形动规的论文时看到了这道题,但感觉并不需要用动规,求出树的直径再暴力枚举一下就搞出来了. 其实是因为我太弱了,看不懂大佬在写什么orz 代码实现如下: #i ...

  9. LUOGU P4408 [NOI2003]逃学的小孩(树的直径)

    题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:“喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?”一听说要考试,Chris的父母就心急如焚,他们决定在尽 ...

随机推荐

  1. 解决 arcGis android TextSymbol乱码的问题

    不论是Arcgis for Android的哪个版本,都没无法解决中文乱码的问题,这个与Android中自带的字体库有关,可以参考这篇文章. 所以,要在Arcgis for Android中显示中文, ...

  2. lua技巧分享之保护执行

    我们在c#/c++里为了防止调用出现异常的时候程序可以正常的执行,经常使用try{}catch{}的结构, 那么,语言简单的lua是怎么做到的呢?答案就在pcall 先简单的介绍一下这个函数: --尝 ...

  3. C# DateTime 日期加1天 减一天 加一月 减一月 等方法(转)

    //今天 DateTime.Now.Date.ToShortDateString(); //昨天,就是今天的日期减一 DateTime.Now.AddDays(-).ToShortDateString ...

  4. C#创建Windows服务入门图解(VS2010)

    C#创建Windows服务入门图解(VS2010) Windows服务大家都知道,比如Audio.Theme都是大家比较熟悉的服务,他们可以设为自动启动的,并且在注册表的开机自启动项里是没有痕迹的.所 ...

  5. iOS-KVC和KVO精炼讲解(干货)

    一.KVO介绍 KVO就是观察者模式,说白了就是你关心的一个值改变了,你就会得到通知.你就可以在你想处理的地方处理这个值. 二.KVO的使用 一般分为三步: 注册监听 使用方法: /** * 添加KV ...

  6. 20141214--C#父类,子类

    首要: 子类 包含父类的所有的属性方法 所有子类都可以直接转化成父类类型 当父类类型变量里面存的是某个子类的对象的时候,才能转化成那个子类类型. 父类与子类的装换: Ren r = new Ren() ...

  7. 20141031--SQL分组,数学函数,聚合函数

    /* 通过代码操作:创建一个数据库,里面有一个学生信息表, 内容包括:学号,姓名,性别,体重,年龄,语数外三门课分数,班级 插入20条数据 执行以下查询操作: 1.查姓王的同学的信息 2.分别查每门课 ...

  8. [Silverlight] Visual Studio2010不能安装Silverlight4_Tools,提示语言不一致

    今天在装Silverlight4_Tools时出现“必须先安装与 Silverlight Tools 4 语言版本相一致的 Visual Studio 2010.Visual Web Develope ...

  9. 可以支持jQuery1.10.1 的 fancybox 1.3.4, 並現在type為Ajax時,也可以定義窗口的大小。

    官網上的 fancybox 1.3.4 太老了,不支持jQuery1.10.1,改動了一下源碼,現在可以支持了. type為Ajax時,也可以定義窗口的大小. $("#ajaxlink&qu ...

  10. 【个人】IIS Express 配置

    <!-- 查看URL访问控制列表: netsh http show urlacl 添加URL访问控制: netsh http add urlacl url=http://myhostname:8 ...