总的来说,这是一道考图论知识的题,可以搜到很多关于树的直径的东西,以及一些证明,这是一道好题!
program shigong;
type arr=array[1..200000]of longint;
var n,m,tot,{边数}
    one,{以节点1为树根时dfs得到的最远点}
    two:longint;{以one为树根时dfs得到的最远点,d(one,two)既为树的直径}
    max:int64;{最远的路径}
    x,y,w:array[1..200000]of longint;{初始边}
    f,{并查集中用作父亲节点,清零后在dfs中用来存每个点的前驱}
    d:array[1..100000]of longint;{记录每个点到树根的路径长度}
    mstx,msty,mstw:array[1..200000]of longint;{存最小生成树}
    s,t:array[1..100000]of longint;{每个节点作为有向边起点时连接的边编号范围}
    v:array[1..100000]of boolean;{标志数组避免dfs重复访问}
procedure init;
var i:longint;
begin
  read(n);read(m);
  for i:=1 to m do
    begin
      read(x[i]);read(y[i]);read(w[i]);
    end;
end;
procedure qsort(l,r:longint;var a,b,c:arr);{快排的设计很巧妙}
var i,j,x,y:longint;
begin
  i:=l;j:=r;
  x:=a[(l+r)shr 1];
  repeat
    while a[i]<x do inc(i);
    while a[j]>x do dec(j);
    if i<=j then begin
      y:=a[i];a[i]:=a[j];a[j]:=y;
      y:=b[i];b[i]:=b[j];b[j]:=y;
      y:=c[i];c[i]:=c[j];c[j]:=y;
      inc(i);dec(j);
      end;
  until i>j;
  if i<r then qsort(i,r,a,b,c);
  if j>l then qsort(l,j,a,b,c);
end;
function find(p:longint):longint;
begin
  if f[p]=p then exit(p);
  f[p]:=find(f[p]);
  exit(f[p]);
end;
procedure union(a,b:longint);
var x,y:longint;
begin
  x:=find(a);y:=find(b);
  f[x]:=y;
end;
function same(a,b:longint):boolean;
begin
  if find(a)=find(b) then exit(true);
  exit(false);
end;
procedure kruskal;
var i:longint;ans:int64;
begin
  qsort(1,m,w,x,y);{此处按权值排序}
  for i:=1 to n do f[i]:=i;
  ans:=0;tot:=0;
  for i:=1 to m do
   if not same(x[i],y[i]) then
     begin
      inc(ans,w[i]);
      union(x[i],y[i]);
      inc(tot);
      mstx[tot]:=x[i];
      msty[tot]:=y[i];
      mstw[tot]:=w[i];
      if tot=n-1 then break;
     end;
  writeln(ans);
end;
procedure prepare;
var i:longint;
begin
  for i:=1 to tot do
  begin
   mstx[n+i-1]:=msty[i];
   msty[n+i-1]:=mstx[i];
   mstw[n+i-1]:=mstw[i];
  end;
  tot:=tot*2;
  qsort(1,tot,mstx,msty,mstw);{注意:此处按始节点排序}
  s[mstx[1]]:=1;
  t[mstx[tot]]:=tot;
  for i:=1 to tot do
   begin
    if (i>1)and(mstx[i]<>mstx[i-1]) then s[mstx[i]]:=i;
    if (i<tot)and(mstx[i]<>mstx[i+1]) then t[mstx[i]]:=i;
   end;
end;
procedure dfs(p:longint);
var i:longint;
begin
  v[p]:=true;
  for i:=s[p] to t[p] do
   if not v[msty[i]] then
    begin
      d[msty[i]]:=d[p]+mstw[i];
      if max<d[msty[i]] then
      begin two:=msty[i];max:=d[msty[i]];end;
      f[msty[i]]:=p;
      dfs(msty[i]);
    end;
end;
function min(a,b:longint):longint;
begin
  if a<b then exit(a);
  exit(b);
end;
function maxx(a,b:longint):longint;
begin
  if a>b then exit(a);
  exit(b);
end;
procedure main;
var now,ans:int64;
begin
  fillchar(v,sizeof(v),false);
  max:=0;two:=1;
  dfs(mstx[1]);
  one:=two;max:=0;
  fillchar(d,sizeof(d),0);
  fillchar(v,sizeof(v),false);
  fillchar(f,sizeof(f),0);
  dfs(one);
  now:=0;ans:=maxlongint;
  while two<>one do
   begin
    ans:=min(ans,maxx(now,max-now));{寻找在树的直径上距离两端路径长度的最大     值最小的点,此节点即为所求,根据直径的定义,可以知道在直径之外的点到这       点的路径长<=这个最小的最大值,否则这条就不是直径了,所以此法正解}
    now:=now+d[two]-d[f[two]];
    two:=f[two];
   end;
  write(ans);
end;
begin
  init;
  kruskal;
  prepare;
  main;
end.

1700施工方案第二季{转nbsp;仕林}相关推荐

  1. codevs 1700 施工方案第二季

    1700 施工方案第二季 2012年市队选拔赛北京  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description c国边防 ...

  2. 【codevs1700】施工方案第二季 MST+树的重心

    题目描述 Description c国边防军在边境某处的阵地是由n个地堡组成的.工兵连受命来到阵地要进行两期施工. 第一期的任务是挖掘暗道让所有地堡互联互通.现已勘测设计了m条互不相交的暗道挖掘方案, ...

  3. 54.施工方案第二季(最小生成树)

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description c国边防军在边境某处的阵地是由n个地堡组成的.工兵连受命来到阵地 ...

  4. codevs1700 施工方案第二季

    题目描述 Description c国边防军在边境某处的阵地是由n个地堡组成的.工兵连受命来到阵地要进行两期施工. 第一期的任务是挖掘暗道让所有地堡互联互通.现已勘测设计了m条互不相交的暗道挖掘方案, ...

  5. 《奋斗》第二季 陆涛和米莱结婚啦……

    <奋斗>第二季剧情人物命运介绍. 陆涛刚到法国接到了华子向南打来的电话告知陆涛的父亲不幸去世了.陆涛认为是徐志森去世了.结果告知是陆亚迅去世了.陆涛极度伤心,决定回国参加丧礼.夏琳说等他事 ...

  6. 百度AI实战营第二季:AI技术商业落地指南

    4月 20日,百度 AI开发者实战营第二季启动,再次召集全国各地技术管理者,在北京"整装待发",并将陆续登陆成都.杭州.深圳.在新一季的实战营中,百度 AI将与开发者.合作伙伴一起 ...

  7. 从全职高手开始的系统_动画全职高手第二季热血回归,腾讯视频的国漫IP全链路开发之道...

    这个国庆档,国产动画在内容市场上的存在感比想象中更加有分量.电影市场上,动画IP电影<姜子牙>完成票房领跑,掀起观影热潮:动画番剧市场上,头部IP动画<全职高手>第二季时隔三年 ...

  8. 场景联创 施耐德电气“绿色智能制造创赢计划”第二季收官

    中国上海,2021年12月21日--今日,由工业和信息化部国际经济技术合作中心(工信部国合中心)与施耐德电气主办的"绿色智能制造创赢计划"第二季总决赛在上海举办.经过半年多的加速营 ...

  9. 打造最美HTML5 3D机房 —— 第二季重磅回归

    前情提要 前阵子写了一篇打造最美html5 3d机房,介绍了如何用html5在网页上创建无插件的精美3d机房场景.这两个月以来,陆续收到很多朋友的鼓(膝)励(盖),受宠若惊之余,对索要源代码的朋友都已 ...

最新文章

  1. Android app 启动页尺寸大小 忘记了怎么办
  2. 企业官网页面设计谨记三个要点!
  3. 第二阶段个人冲刺第一天总结
  4. PHP学习笔记--011 PHP文件处理
  5. 计算机 专业英语 考试,《计算机专业英语》期末考试试卷
  6. C++ 四种强制类型转变与区别之处
  7. 二叉搜索树相关知识及应用操作
  8. 三星核S5PV210AH-A0 SAMSUNG
  9. 电脑硬盘分区合并_简单扩容电脑C盘,无需U盘重装系统
  10. 准备将redis引入项目做消息队列使用
  11. 夺命雷公狗---linux NO:26 linux下的用户和用户组的管理
  12. 17暴力或dfs:凑算术
  13. 无人机倾斜摄影测量土方计算
  14. (一百五十一)Android P 真正创建sta iface的地方
  15. 小僧尽知他的备细出 水浒
  16. 2017 网易游戏互娱游戏研发4.21(offer)
  17. 面试摘要【持续更新】
  18. 扦插技术图解_爱之蔓平卧扦插法(图解)
  19. PaaS,BLT模型中的一部分
  20. 【软件构造】——课程篇 高屋建瓴,从宏观角度谈软件构造

热门文章

  1. linux文件名带星号,Linux安装之bash星号用法
  2. php写的微信聊天界面,Android_Android高仿微信聊天界面代码分享,微信聊天现在非常火,是因其 - phpStudy...
  3. Windows10系统安装软件后软件界面异常(变得很小或很大),界面显示不完全的解决方案
  4. 计算机辅助教育相关论文,计算机辅助教育论文
  5. 微信小程序 — 二维码海报分享到好友功能
  6. Redis使用说明书(Windows)
  7. 畜牧养殖物联网:物联网在畜牧养殖中的应用
  8. Photoshop中裁剪工具的使用及扩展
  9. flume采集数据易出现的bug
  10. 事件的独立和事件互不相容两个概念的区别