题目描述 Description

c国边防军在边境某处的阵地是由n个地堡组成的。工兵连受命来到阵地要进行两期施工。

第一期的任务是挖掘暗道让所有地堡互联互通。现已勘测设计了m条互不相交的暗道挖掘方案,如果这m条暗道都实施挖掘,肯定能达到互联互通的目的。事实上,适当选择其中n-1个方案挖掘,就能实现互联互通,即从每个地堡出发都能到达其他任何一个地堡(允许经过别的地堡)。

连长精心谋算,在m个设计规划中选取了挖掘总距离最短且能保证互联互通的若干个暗道规划实施了挖掘,完成了第一期的施工任务后又接受了第二期的施工任务,要求选择一个地堡进行扩建改造,使其能向每个地堡提供弹药。为了让弹药供应更及时、更快捷,从改扩建的地堡到最远地堡的距离(称为最远输送距离)应当尽量小。

你的任务是先求出第一期施工挖掘的总距离,再求改扩建地堡最远输送距离的最小值。

输入描述 Input Description

其中第一行是n和m,m>=n
下面的m行每行3个数xi、yi、zi,表示xi到yi的距离是zi
  zi<1000000且m个距离互不相等

输出描述 Output Description

共包含两行,每行一个整数,
第一行是第一期的挖掘总距离,第二行是最远输送距离的最小值。

样例输入 Sample Input

4 5
1 2 1
2 3 2
3 4 3
4 1 4
3 1 5

样例输出 Sample Output

6
3

数据范围及提示 Data Size & Hint

【样例说明】
第一期挖掘1到2、2到3和3到4的3条暗道,第二期选择3号地堡进行改扩建,最远输送距离是3
【数据规模】
60%的数据 n<10且m<20
80%的数据 n<1000且m<2000
100%的数据 n<100000且m<200000

________________________________________________________________________________________________________________

树形动归

点i到大最远的点有两种可能,要么是它下面的叶子,也就是向西走,要么在父亲方向,也就是向上走。

向下的方向f[i]=max(f[j]+e[i->j].w)

向上的方向ff[i]=max(ff[fa[i]],f[son[fa[i](不是i点)])+e[i->fa[i]].w

_________________________________________________________________________________________________________________

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=100005;
 4 const int maxm=200010;
 5 int n,m;
 6 struct edge
 7 {
 8     int u,v,w,nxt;
 9 }e[maxm<<1],ee[maxm];
10 int head[maxn],js;
11 void addage(int u,int v,int w)
12 {
13     e[++js].u=u;e[js].v=v;e[js].w=w;
14     e[js].nxt=head[u];head[u]=js;
15 }
16 int fa[maxn];
17 long long ans;
18 int find(int x)
19 {
20     if(fa[x]==x)return x;
21     return fa[x]=find(fa[x]);
22 }
23 bool un(int u,int v)
24 {
25     u=find(u),v=find(v);
26     if(u==v)return 0;
27     fa[v]=u;
28     return 1;
29 }
30 long long dl1[maxn],dl2[maxn],ul[maxn];
31 void dfs(int u,int fa)
32 {
33     for(int i=head[u];i;i=e[i].nxt)
34     {
35         int v=e[i].v;
36         if(v!=fa)
37         {
38             dfs(v,u);
39             if(dl1[v]+e[i].w>dl1[u])dl2[u]=dl1[u],dl1[u]=dl1[v]+e[i].w;
40             else if(dl1[v]+e[i].w>dl2[u])dl2[u]=dl1[v]+e[i].w;
41         }
42     }
43 }
44 void dfs2(int  u,int fa)
45 {
46     for(int i=head[u];i;i=e[i].nxt)
47     {
48         int v=e[i].v;
49         if(v!=fa)
50         {
51             if(dl1[v]+e[i].w==dl1[u])ul[v]=dl2[u];
52             else ul[v]=dl1[u];
53             if(ul[u]>ul[v])ul[v]=ul[u];
54             ul[v]+=e[i].w;
55             dfs2(v,u);
56         }
57     }
58 }
59 bool mycp(edge a,edge b)
60 {
61     return a.w<b.w;
62 }
63 int main()
64 {
65     scanf("%d%d",&n,&m);
66     for(int i=1;i<=n;++i)fa[i]=i;
67     for(int u,v,w,tp=0,i=0;i<m;++i)
68     {
69         scanf("%d%d%d",&u,&v,&w);
70         ee[i].u=u;ee[i].v=v;ee[i].w=w;
71
72     }
73     sort(ee,ee+m,mycp);
74     for(int i=0;i<m;++i)
75     {
76         int u=ee[i].u,v=ee[i].v,w=ee[i].w;
77         if(un(u,v))
78         {
79             ans+=w;
80             addage(u,v,w);
81             addage(v,u,w);
82         }
83     }
84     dfs(1,0);
85     dfs2(1,0);
86     long long ans2=0x7ffffffffffffff;
87     for(int i=1;i<=n;++i)
88     {
89         int tp=max(ul[i],dl1[i]);
90         ans2=ans2<tp?ans2:tp;
91     }
92     printf("%lld\n%lld",ans,ans2);
93     return 0;
94 }

View Code

转载于:https://www.cnblogs.com/gryzy/p/9844531.html

codevs1700 施工方案第二季相关推荐

  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. 1700施工方案第二季{转nbsp;仕林}

    总的来说,这是一道考图论知识的题,可以搜到很多关于树的直径的东西,以及一些证明,这是一道好题! program shigong; type arr=array[1..200000]of longint ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. linux查看jvm内存被使用情况,Linux系统查看内存使用率
  2. Winform中实现ZedGraph中曲线右键显示为中文
  3. Android studio编译出现Failed to finalize session : INSTALL_FAILED_INVALID_APK
  4. 在winform中,禁止combobox随着鼠标一起滑动!
  5. mysql php 封装类_PHP递归实现层级树状展开的方法
  6. 计算机初试占比高的学校,复试压力小,初试占比70%及以上的院校汇总!
  7. 编程学习记录1:编程的一些简单概念
  8. desktop viewer
  9. PySpark-Recipes : I/O操作(txt, json, hdfs, csv...)
  10. iOS Unable to install “XXX“(编译成功,但跑到真机上弹出这个提示框)
  11. 身份证编码与校验码计算规则
  12. keil c51v952详细安装教程
  13. python和java和c语言的区别-python和c语言的主要区别总结
  14. 学习Python编程好找工作吗?
  15. 百度脑图-便捷的思维工具
  16. 复现计算机论文模型,深度学习模型复现难?看看这篇句子对模型的复现论文
  17. 高通Android手机软件开发培训
  18. 终于要露脸了!神十六至少一名第三批航天员,景海鹏是指令长?
  19. Android代码设置锁屏壁纸
  20. Android Facebook第三方登录 20200529

热门文章

  1. 什么是利用计算机化的知识进行自动推理,基于实例模型的知识推理及其在自动阅卷系统中的应用...
  2. oracle唯一索引能删除吗,Oracle:ora-02429:无法用于删除强制唯一/主键的索引 解决...
  3. python manager模块_Python 并发模块
  4. 在python中、如果异常并未被处理或捕捉_7、Python-异常
  5. python xlrd读取excel慢_python操作Excel读写--使用xlrd
  6. JAVA IO 以及 NIO 理解
  7. 复数幂用java程序怎么求_蓝桥杯——复数幂 (2018JavaAB组第3题)
  8. 【linux】ssh 远程执行命令
  9. 95-25-010-命令-topic 创建过程
  10. 【Flink】Flink1.11.2 on YARN滚动日志配置