1700 施工方案第二季

2012年市队选拔赛北京

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold

题解
 
 

 
题目描述 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

分类标签 Tags 点此展开

思路:先跑最小生成树,得出第一个答案。

第二期任务是要求最远距离最小,我们可以很容易的得出以下结论:这个点一定位于这棵树的直径上,并且是这棵树的直径的中点。

找到这个点后,再跑一个spfa或者dfs,找出离这个点最远的点,这个距离就是答案。

错因:别忘了开long long。

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXNCNT 100010
#define MAXEDGE 200010
using namespace std;
long long ans,ans2;
int n,m,tot,src,decc,home;
long long minn=0x7f7f7f7f,mann=0x7f7f7f7f;
long long dis[MAXNCNT],cap[MAXEDGE*2];
long long sum1[MAXNCNT],sum2[MAXNCNT];
int fa[MAXNCNT],dad[MAXNCNT],vis[MAXNCNT];
int to[MAXEDGE*2],net[MAXEDGE*2],head[MAXNCNT];
struct nond{ int u,v;long long w; }v[MAXEDGE];
int abs(int x){ return x>0?x:-x; }
int cmp(nond a,nond b){ return a.w<b.w; }
int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]); }
void add(int u,int v,long long w){to[++tot]=v;cap[tot]=w;net[tot]=head[u];head[u]=tot;to[++tot]=u;cap[tot]=w;net[tot]=head[v];head[v]=tot;
}
void spfa(int s){queue<int>que;memset(vis,0,sizeof(vis));memset(dis,0x7f,sizeof(dis));dis[s]=0;vis[s]=1;que.push(s);while(!que.empty()){int now=que.front();que.pop();vis[now]=0;for(int i=head[now];i;i=net[i])if(dis[to[i]]>dis[now]+cap[i]){dis[to[i]]=dis[now]+cap[i];if(!vis[to[i]]){vis[to[i]]=1;que.push(to[i]);}}}
}
void dfs(int now){for(int i=head[now];i;i=net[i])if(dis[to[i]]==-1){dis[to[i]]=dis[now]+cap[i];dfs(to[i]);}
}
void dfs1(int now){for(int i=head[now];i;i=net[i])if(dad[now]!=to[i]){dad[to[i]]=now;sum1[to[i]]=sum1[now]+cap[i];dfs1(to[i]);}
}
void dfs2(int now){for(int i=head[now];i;i=net[i])if(dad[now]!=to[i]){dad[to[i]]=now;sum2[to[i]]=sum2[now]+cap[i];dfs2(to[i]);}
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d%lld",&v[i].u,&v[i].v,&v[i].w);sort(v+1,v+1+m,cmp);for(int i=1;i<=n;i++)    fa[i]=i;for(int i=1;i<=m;i++){int dx=find(v[i].u);int dy=find(v[i].v);if(dx==dy)    continue;fa[dy]=dx;ans+=v[i].w;add(v[i].u,v[i].v,v[i].w);}printf("%lld\n",ans);memset(dis,-1,sizeof(dis));decc=1;dis[decc]=0;dfs(decc);for(int i=1;i<=n;i++)if(dis[i]>dis[decc])    decc=i;memset(dis,-1,sizeof(dis));dis[decc]=0;dfs(decc);src=decc;for(int i=1;i<=n;i++)if(dis[i]>dis[decc])    decc=i;dfs1(src);memset(dad,0,sizeof(dad));dfs2(decc);memset(dad,0,sizeof(dad));for(int i=1;i<=n;i++){long long little=abs(sum1[i]-sum2[i]);if(little<minn){ mann=sum1[i];home=i;minn=little; }else if(little==minn)if(sum1[i]<mann){ mann=sum1[i];home=i; }}spfa(home);for(int i=1;i<=n;i++)if(i!=home&&dis[i]>ans2)    ans2=dis[i];cout<<ans2;
}

转载于:https://www.cnblogs.com/cangT-Tlan/p/8831065.html

codevs 1700 施工方案第二季相关推荐

  1. 1700施工方案第二季{转nbsp;仕林}

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

  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. 【D3】transition API
  2. 二阶系统阶跃响应实验_自控原理二阶系统阶跃响应及性能分析实验报告
  3. 人群场景分析--Slicing Convolutional Neural Network for Crowd Video Understanding
  4. Nestjs 微服务
  5. linux关于程序的user,c – “get_user_pages”如何工作(对于linux驱动程序)
  6. 如何通过终端快速删除文件和目录(bash shell)[关闭]
  7. UIButton标题和图片位置的确定法则
  8. linux中ssh连接慢的一种解决方法
  9. 【转载】作者苗晓平介绍的飞鸽传书
  10. Visio的VBA初探
  11. Skywalking-08:OAL原理——如何动态生成Class类
  12. 使用 scipy.fft 进行Fourier Transform:Python 信号处理
  13. 自家院子里能不能种桃树呢?
  14. SourceTree使用笔记 ssh-key配置
  15. 电子技术课程设计—交通灯控制系统设计
  16. 8000401a 因为配置标志不正确 错误及解决办法
  17. python期货基本面分析_期货盘面分析语言,我用python做期货
  18. 总纲-信息、网络等级保护测评机构 、名单-等保测评机构目录-等保测评公司推荐目录
  19. JVM 宋红康版 : JVM与Java体系结构
  20. 再见,深圳!再见,腾讯!

热门文章

  1. Android控件晃动效果实现
  2. lan8720ping不通|识别不到网线|0x7809
  3. C语言:将主函数中输入的字符串反序存放。例如:输入字符串“abcdefg“,则应输出“gfedcba“。
  4. java文件夹命名规则
  5. Python基础综合练习1——第1关:最小公倍数算法
  6. 重点计算机大学,计算机专业168强高校排名:这些大学实力很强,可重点关注!...
  7. 移动app开发流程,app开发步骤
  8. 1.3.19 网络端口地址转换 NAPT 配置
  9. 怎样才能根除幽门螺旋杆菌?
  10. c语言编程模拟进程管理,C语言如何模拟进程管理?