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摄制组还将为同步上 ...
随机推荐
- CentOS 8 安装Nginx
安装命令: dnf install nginx -y 这就安装完成了 ,对你没看错一个命令就已经把nginx安装好了,不信你通过 nginx -V 命令查看. 常用操作: 1.nginx配置文件目录 ...
- Beta冲刺——汇总随笔
一.代码规范与计划随笔 Beta冲刺--代码规范与计划 二.凡事预则立随笔 Beta冲刺--凡事预则立 三.10篇冲刺随笔 Beta冲刺--第一天 Beta冲刺--第二天 Beta冲刺--第三天 Be ...
- vue-cli3 创建项目路由缺失问题
1.在项目中新建一个router.js router.js import Vue from 'vue' import Router from 'vue-router' import Home from ...
- 不吹不黑,jupyter lab 3.0客观使用体验
1 简介 jupyter lab于近期发布了其具有里程碑意义的3.0版本,随之带来的一些重要新特性,想必广大读者朋友已在各大公众号所翻译转载的jupyter lab团队官方介绍文章中知晓了很多. 图1 ...
- MySql创建存储过程,并使用事件定时调用
一.使用命令行创建存储过程的步骤 :参数详情参考 https://www.mysqlzh.com/ 1.模板 delimiter $$ # 设置分隔符为 '$$' ,mysql默认的语句分隔符为 ' ...
- 【JavaWeb】JSON 文件
JSON 文件 什么是 JSON JSON(JavaScript Object Notation),即 JS 对象符号. 是一种轻量级(相对于 XML 来说)的数据交换格式,易于阅读和编写,同时也易于 ...
- LeetCode394 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. 你可 ...
- [工作札记]02: .Net Winform控件TreeView最简递归绑定方法
前言:Treeview控件是我们在WinForm.WebForm开发中经常使用的控件,需要从数据库动态加载数据,然后递归绑定每一个节点:同样,递归的思路在其他程序中也经常运用,包括.Net MVC等. ...
- 容器编排系统K8s之Prometheus监控系统+Grafana部署
前文我们聊到了k8s的apiservice资源结合自定义apiserver扩展原生apiserver功能的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/ ...
- java进阶(31)--TreeSet集合、TreeMap集合、自平衡二叉树
一.TreeSet集合简单 1.TreeSet集合底层是一个TreeMap 2.TreeMap集合底层是一个二叉树 3.放到TreeSet集合的元素等同于放到TreeMap集合的Key部分 4.Tre ...