codevs1700 施工方案第二季
c国边防军在边境某处的阵地是由n个地堡组成的。工兵连受命来到阵地要进行两期施工。
第一期的任务是挖掘暗道让所有地堡互联互通。现已勘测设计了m条互不相交的暗道挖掘方案,如果这m条暗道都实施挖掘,肯定能达到互联互通的目的。事实上,适当选择其中n-1个方案挖掘,就能实现互联互通,即从每个地堡出发都能到达其他任何一个地堡(允许经过别的地堡)。
连长精心谋算,在m个设计规划中选取了挖掘总距离最短且能保证互联互通的若干个暗道规划实施了挖掘,完成了第一期的施工任务后又接受了第二期的施工任务,要求选择一个地堡进行扩建改造,使其能向每个地堡提供弹药。为了让弹药供应更及时、更快捷,从改扩建的地堡到最远地堡的距离(称为最远输送距离)应当尽量小。
你的任务是先求出第一期施工挖掘的总距离,再求改扩建地堡最远输送距离的最小值。
其中第一行是n和m,m>=n
下面的m行每行3个数xi、yi、zi,表示xi到yi的距离是zi
zi<1000000且m个距离互不相等
共包含两行,每行一个整数,
第一行是第一期的挖掘总距离,第二行是最远输送距离的最小值。
4 5
1 2 1
2 3 2
3 4 3
4 1 4
3 1 5
6
3
【样例说明】
第一期挖掘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 }
codevs1700 施工方案第二季的更多相关文章
- codevs——1700 施工方案第二季
1700 施工方案第二季 2012年市队选拔赛北京 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description c国边防 ...
- codevs 1700 施工方案第二季
1700 施工方案第二季 2012年市队选拔赛北京 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description c国边防 ...
- CODEVS——T 1700 施工方案第二季
http://codevs.cn/problem/1700/ 2012年市队选拔赛北京 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 ...
- COJ262 HDNOIP201206施工方案
HDNOIP201206施工方案 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 c国边防军在边境某处的阵地是由n个地堡组成的. ...
- HDNOIP201206施工方案
HDNOIP201206施工方案 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 c国边防军在边境某处的阵地是由n个地堡组成的. ...
- [转][南京米联ZYNQ深入浅出]第二季更新完毕课程共计16节课
[南京米联]ZYNQ第二季更新完毕课程共计16节课 [第二季ZYNQ] ...
- 【第二季】CH11_ ZYNQ软硬调试高级技巧
[第二季]CH11_ ZYNQ软硬调试高级技巧 软件和硬件的完美结合才是SOC的优势和长处,那么开发ZYNQ就需要掌握软件和硬件开发的调试技巧,这样才能同时分析软件或者硬件的运行情况,找到问题,最终解 ...
- [第二季ZYNQ] [南京米联]ZYNQ第二季更新完毕课程共计16节课
ZYNQ第二季更新完毕课程共计16节课全部免费 [第二季ZYNQ] ...
- 《舌尖上的中国》第二季今日首播了,天猫食品也跟着首发,借力使力[bubuko.com]
天猫旗下的天猫食品与央视CCTV-1栏目<舌尖上的中国>第二季(以下简称“舌尖2”)达成合作,天猫食品成为舌尖2独家合作平台,同步首发每期 节目中的食材和美食菜谱,舌尖2摄制组还将为同步上 ...
随机推荐
- 从最长公共子序列问题理解动态规划算法(DP)
一.动态规划(Dynamic Programming) 动态规划方法通常用于求解最优化问题.我们希望找到一个解使其取得最优值,而不是所有最优解,可能有多个解都达到最优值. 二.什么问题适合DP解法 如 ...
- Java学习日报7.10
package Address;import java.util.Scanner; public class Address{ Scanner sc=new Scanner(System.in); p ...
- 毕大从自身设计HSF的角度出发谈服务化这回事
服务化的过去.现在和未来 原创: bluedavy HelloJava 9月18日 服务化毫无疑问是技术圈一直火热的buzzword,而且其实已经非常多年了,这在日益更新的技术圈还挺神奇的,作为在服 ...
- 30天自制OS(linux环境)-day1
30天自制OS(linux环境)--第一天 我是在CentOS的环境上面实现的,使用ubuntu的环境也是类似的 第一步:因为要对二进制文件进行编辑,所以安装二进制编辑器hexedit(当然其他的也可 ...
- VScode中配置C++运行环境
目录 VScode中配置C++运行环境 1. 哪些插件 2. 配置开始 3. 编写代码并运行 VScode中配置C++运行环境 关于安装mingw的教程,网络上已经有很多了,这里不再赘述,下面就看VS ...
- mapboxgl实现带箭头轨迹线
最近在使用mapboxgl实现轨迹展示时,想实现类似高德地图导航轨迹效果,然而并未在网上找到类似示例.经一番研究与尝试,最终解决,效果如下. 添加箭头核心代码如下,只需在配置layout中添加symb ...
- sh -s用法
1.基本用法 (1)sh -s 会从标准输入中读取命令,并在子shell中执行 (2)sh -s 后从第一个非 - 开头的参数开始,依次被赋值给子shell的 $1,$2... (3)sh -s 的第 ...
- window10搭建pyspark(超级详细)
一.组件版本说明 Java JDK:1.8.0_144 spark-2.4.3-bin-hadoop2.7hadoop-2.7.7 scala-2.12.8 hadooponwindows-maste ...
- .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ Masstransit 异常处理)--学习笔记
2.6.8 RabbitMQ -- Masstransit 异常处理 异常处理 其他 高级功能 异常处理 异常与重试 重试配置 重试条件 重新投递信息 信箱 异常与重试 Exception publi ...
- Flutter 布局类组件:流式布局(Wrap和Flow)
前言 把超出屏幕显示范围会自动折行的布局称为流式布局.Flutter中通过Wrap和Flow来支持流式布局,将Row换成Wrap后溢出部分则会自动折行. Wrap 接口描述 Wrap({ Key ke ...