华山论剑

题目描述

话说数年一度的武林盛事“华山论剑”将至,东邪、西毒、南帝、北丐,老顽童等高手云集华山之巅,誓要分出究竟谁是武林至尊……
如此武林盛世,当然求围观。据统计,有n-1位同学想去华山看热闹,他们分别住在编号为1-n(除华山所在地x)的地方,华山编号为x(1<=x<=n)。现在有M(1<=m<=100000)条有向道路,每条路长为ti(1<=ti<=100)。
由于每位同学看完打架后还要回家吃饭,所以要选择最短路径,求这n-1位同学的最短路径(一个来回)中最长的一条的长度。
特别提醒:可能有权值不同的重边。
数据保证每位同学均能到达华山处,并从华山返回。

输入

第1行: n,m,x;
第2~m+1行: ai,bi,ti,表示有一条从ai到bi的路,长度为ti.

输出

输出仅一行,为最长最短路的长度。

样例输入

4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3

样例输出

10

提示

对于60%的数据,满足 1<=n<=100
对于100%的数据,满足 1<=n<=1000。

  分析:
  并不难的最短路。
  分别正反向建边,然后正反跑两次最短路,再求两次最短路之和的最大值就行了。
  Code:
//It is made by HolseLee on 17th Aug 2018
//华山论剑
#include<bits/stdc++.h>
#define Max(a,b) (a)>(b)?(a):(b)
using namespace std;const int N=1001;
const int M=1e5+7;
int n,m,tag,h1[N],h2[N],cnt1,cnt2,dis1[N],dis2[N],ans;
bool vis[N];
struct Node{int to,val,nxt;
}e1[M],e2[M];
queue<int>t;inline int read()
{char ch=getchar();int num=0;bool flag=false;while(ch<'0'||ch>'9'){if(ch=='-')flag=true;ch=getchar();}while(ch>='0'&&ch<='9'){num=num*10+ch-'0';ch=getchar();}return flag?-num:num;
}inline void add1(int x,int y,int z)
{e1[++cnt1].to=y;e1[cnt1].val=z;e1[cnt1].nxt=h1[x];h1[x]=cnt1;
}inline void add2(int x,int y,int z)
{e2[++cnt2].to=y;e2[cnt2].val=z;e2[cnt2].nxt=h2[x];h2[x]=cnt2;
}void spfa1()
{memset(vis,0,sizeof(vis));memset(dis1,0x7f,sizeof(dis1));while(!t.empty())t.pop();dis1[tag]=0;vis[tag]=1;t.push(tag);int x,y;while(!t.empty()){x=t.front();t.pop();vis[x]=0;for(int i=h1[x];i!=-1;i=e1[i].nxt){y=e1[i].to;if(dis1[y]>dis1[x]+e1[i].val){dis1[y]=dis1[x]+e1[i].val;if(!vis[y])t.push(y),vis[y]=1;}}}
}void spfa2()
{memset(vis,0,sizeof(vis));memset(dis2,0x7f,sizeof(dis2));while(!t.empty())t.pop();dis2[tag]=0;vis[tag]=1;t.push(tag);int x,y;while(!t.empty()){x=t.front();t.pop();vis[x]=0;for(int i=h2[x];i!=-1;i=e2[i].nxt){y=e2[i].to;if(dis2[y]>dis2[x]+e2[i].val){dis2[y]=dis2[x]+e2[i].val;if(!vis[y])t.push(y),vis[y]=1;}}}
}int main()
{n=read();m=read();tag=read();memset(h1,-1,sizeof(h1));memset(h2,-1,sizeof(h2));int x,y,z;for(int i=1;i<=m;++i){x=read();y=read();z=read();add1(x,y,z);add2(y,x,z);}spfa1();spfa2();for(int i=1;i<=n;++i){ans=Max(ans,dis1[i]+dis2[i]);}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/cytus/p/9494979.html

校内练习 华山论剑 [最短路]相关推荐

  1. ES(elasticsearch)搜索引擎安装和使用

    本文章为转载文章,如要转载标注出处 查看全文 http://www.taodudu.cc/news/show-3144290.html 相关文章: VT高级搜索语法 hive模糊搜索表 击溃360手机 ...

  2. 2018 焦作站亚洲区域赛校内选拔赛题解

    SUST_2018 焦作站亚洲区域赛校内选拔赛 A.高速        by yoyo tag:图论.最短路 //最短路 #include<bits/stdc++.h> using nam ...

  3. SUST_2018 焦作站亚洲区域赛校内选拔赛题解

    SUST_2018 焦作站亚洲区域赛校内选拔赛 A.高速        by yoyo tag:图论.最短路 //最短路 #include<bits/stdc++.h> using nam ...

  4. 蓝桥杯c语言校内选拔赛试题,2013年蓝桥杯校内选拔赛C语言B组.docx

    2013年蓝桥杯校内选拔赛C语言B组.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水 ...

  5. 中国高校计算机大赛(天梯赛)官网,中国高校计算机大赛——团体程序设计天梯赛校内辅导通知...

    程序设计能力是大学生利用计算机分析问题.解决问题的重要基础能力.为了推进该能力的培养,提高综合素质,丰富校园学术气氛,在教务处和信息学院的支持下,拟组队参加 2018 年3月至5月举办的第三届&quo ...

  6. 2019大学生电子设计竞赛—简易电路测试仪及2020TI杯邀请赛校内选拔—差分放大测试装置题目解析

    在十天之前,刚做了2019年大学生电子设计竞赛的题目-简易电路特性测试仪,然后在三天前参加TI杯邀请赛校内选拔赛,题目就是国赛题的改编,只不过多了很多其他要求.为此,这期的题目解析就把这两道题放一起来 ...

  7. 2019年吉林大学数学建模校内选拔赛B题的一种思路

    前几天举办的数学建模校内选拔赛B题是这样的: B题 中国像素地图城市间最短路优化问题 下图是在http://pixelmap.amcharts.com/ 上生成的中国像素地图. 每个小正方形边长为6p ...

  8. CSDN 2008英雄大会之“华山论剑”

    说到英雄大会,肯定就少不了像金庸小说那样的"华山论剑",让众多的武林高手在一起切磋武艺,谈论武林中事.因此CSDN也毫不例外,广发请帖,邀请了当今众多武林高手共聚一堂,共商软件大业 ...

  9. 数据结构与算法实验04-最短路问题校园导游系统

    最短路问题 文章目录 最短路问题 实验要求 实验思路 设计的校园图(别偷我图!!!) 完整代码 实验截图 实验要求 **实验题目:**校园导游咨询实验目的:掌握图的存储方法和最短路经算法.实验内容:设 ...

最新文章

  1. WMI技术介绍和应用——查询磁盘分区和逻辑磁盘信息
  2. 即时编译和提前编译_即时编译说明
  3. 中国AI专利申请量超美国,百度居国内首位
  4. Android周学习Step By Step(9)--Intent之广播(完)
  5. C++ Primer 5th笔记(chap 18 大型程序工具)函数 try 语句块与构造函数
  6. Web前端开发CSS基础(2)
  7. [LoadRunner]UTF8字符格式
  8. linux加密框架 crypto 算法管理 - 哈希算法应用实例
  9. 【OpenCV 例程200篇】42. 图像的灰度变换(比特平面分层)
  10. 使用lua实现nginx rewrite
  11. 2016-2017-2 20155117实验二《Java面向对象程序设计》实验报告
  12. FFmpeg的Android平台移植—编译篇(验证可用)
  13. ts16949 软件开发流程图_新产品开发流程图:包括APQP,DFMEA,PFMEA,PPAP(FAI),SPC,MSA(GRR)等...
  14. 移动APP测试用例一览表(常规用例)
  15. android实现短信自动转发,利用短信通知的方式在Tasker中实现收到Android手机短信自动转发到微信...
  16. 【word】页码分栏,左侧文字右侧页码
  17. 关于HTTP的几个个人预言
  18. 炼油厂将abc三种原油 matlab求解,某工厂制造三种产品A、B和C需要两种资源(劳动力和原材料),目标是要确定总利润最大的最优生产计划。列出的线性...
  19. java代码安全检测机制,下列选项中,属于Java语言的代码安全检测机制的一项是______。A.动态链接B.访问权限的检查C.通过接...
  20. git-lfs使用笔记

热门文章

  1. 笔记:李想分享的创业经历的5个楼层
  2. 【稳定性day0】稳定性治理的三种思想—亚马逊、Netflix与蚂蚁金服
  3. list和tuple的区别
  4. 排列组合思维导图_思维模型10 - 排列组合是什么?
  5. clamav Java_ClamAV安装使用详解
  6. 【C++模板编程入门】模板介绍、模板定义、函数模板、类模板、模板的继承
  7. swust1737: 太空飞行计划问题
  8. mac虚拟机桌面图标隐藏_Win10 终极美化篇 | 高仿Mac ,这不是主题
  9. FilterSecurityInterceptor源码解读
  10. 服务器支持电脑硬盘吗,服务器硬盘和普通硬盘有什么区别?服务器硬盘和普通硬盘区别对比评测...