CODEVS——T 1700 施工方案第二季
http://codevs.cn/problem/1700/
2012年市队选拔赛北京
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
第一问:最小生成树可求
第二问:树上距离最远的两点的路径为直径,显然将城堡在直径上的点扩建最优
(记录从直径某一段点,到直径上每点的距离,则ans=min(ans,val[t]-val[u])
#include <algorithm>
#include <cstring>
#include <cstdio> #define LL long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
inline void read(int &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
}
const int N(+);
const int M(+);
int n,m,head[N],sumedge;
struct Edge {
int v,next,w;
Edge(int v=,int next=,int w=):v(v),next(next),w(w){}
}edge[N<<];
struct Road {
int u,v,w;
bool operator < (const Road x)const
{
return w<x.w;
}
Road(int u=,int v=,int w=):u(u),v(v),w(w){}
}road[M];
inline void ins(int u,int v,int w)
{
edge[++sumedge]=Edge(v,head[u],w);
head[u]=sumedge;
} int fa[N];
int find(int x)
{
return x==fa[x]?x:fa[x]=find(fa[x]);
}
inline LL K_for_get_road()
{
int cnt=;
LL ret=;
std::sort(road+,road+m+);
for(int i=; i<=n; ++i) fa[i]=i;
for(int fx,fy,i=; i<=m; ++i)
{
fx=find(road[i].u),fy=find(road[i].v);
if(fx==fy) continue;
fa[fx]=fy; ret+=(LL)road[i].w;
ins(road[i].u,road[i].v,road[i].w);
ins(road[i].v,road[i].u,road[i].w);
if(++cnt==n-) return ret;
}
return ret;
} LL val[N],ans;
int s,t,pre[N];
void DFS(int u)
{
for(int x,v,i=head[u]; i; i=edge[i].next)
{
v=edge[i].v;
if(v==pre[u]) continue;
val[v]=val[u]+(LL)edge[i].w;
pre[v]=u; DFS(v);
}
}
void Get(int u)
{
if(pre[u]) Get(pre[u]);
ans=min(ans,max(val[u],val[t]-val[u]));
} int Presist()
{
read(n),read(m);
for(int u,v,w,i=; i<=m; ++i)
read(u),read(v),read(w),road[i]=Road(u,v,w);
printf("%lld\n",K_for_get_road()); DFS(s=);
for(int i=; i<=n; ++i) if(val[i]>val[s]) s=i;
memset(val,,sizeof(val));
memset(pre,,sizeof(pre));
DFS(s);t=;
for(int i=; i<=n; ++i) if(val[i]>val[t]) t=i;
ans=val[t]; Get(t);
printf("%lld\n",ans);
return ;
} int Aptal=Presist();
int main(){;}
CODEVS——T 1700 施工方案第二季的更多相关文章
- codevs——1700 施工方案第二季
		
1700 施工方案第二季 2012年市队选拔赛北京 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description c国边防 ...
 - codevs 1700 施工方案第二季
		
1700 施工方案第二季 2012年市队选拔赛北京 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description c国边防 ...
 - codevs1700 施工方案第二季
		
题目描述 Description c国边防军在边境某处的阵地是由n个地堡组成的.工兵连受命来到阵地要进行两期施工. 第一期的任务是挖掘暗道让所有地堡互联互通.现已勘测设计了m条互不相交的暗道挖掘方案, ...
 - 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摄制组还将为同步上 ...
 
随机推荐
- 275 H-Index II H指数 II
			
这是 H指数 进阶问题:如果citations 是升序的会怎样?你可以优化你的算法吗? 详见:https://leetcode.com/problems/h-index-ii/description/ ...
 - linux下jdk与tomcat的安装与配置
			
Linux中jdk与tomcat的安装与配置 1.搭建环境: (1)Linux环境:CentOS6.1 (2)jdk-1.8 (3)tomcat-9.0 2.在Linux系统上创建目录 在usr/lo ...
 - Position属性四个值:static、fixed、absolute和relative的区别
			
1.static(静态定位):默认值.没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明). 2.relative(相对定位):生成相对 ...
 - iOS浏览器不能打开手机QQ客服与指定用户聊天界面
			
这个问题是我在公司需求的时候遇到的,QQ推广工具网站获取的链接在苹果自带浏览器没法打开到聊天界面,是因为safair在打开到app store的时候把参数给丢了,app store再打开到QQ的时候就 ...
 - 联想 Vibe Shot(Z90-3) 免recovery 获取ROOT权限 救砖 VIBEUI V3.1_1625
			
>>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...
 - Sonar 规则
			
bug类型: 1.".equals()" should not be used to test the values of "Atomic" classes. ...
 - java设计模式之代理模式模式总结
			
定义:代理模式这种设计模式是一种使用代理对象来执行目标对象的方法并在代理对象中增强目标对象方法的一种设计模式. 解读定义: 1.代理对象和目标对象有共同的接口: 2.使用代理对象执行目标对象中的方法: ...
 - Redis系列(十一)--阿里云开发规范
			
本文主要介绍阿里云Redis的开发规范,主要从以下几个方面说明: 1.键值设计 2.命令使用 3.客户端使用 4.相关工具 一.键值设计 1.key name设计 1).[建议]:可读性和可管理性 以 ...
 - day02python
			
''' 列表 定义:在[]内,可以存放多个任意类型的值,并以逗号隔开. 一般用于存放学生的爱好,课堂的周期等等... ''' students=['钱垚','李小龙','张全蛋','赵铁柱'] pri ...
 - jdbcTemplate传参使用Map或List
			
List传参方式 举个例子 sql = "select * from table where id=? and param=?": sql中的参数要用?形式,然后使用list.ad ...