codevs 4052 黎恒健大战YJY
现在,黎恒健与YJY由于身处异地,非常迫切地想在最短的时间内相遇,然后干一架。但是由于双方都在努力地编程序想干掉对方,所以他们希望你来帮他们找到一个最好的方案使得相遇的时间最短。
在此我们定义"相遇"为:两个人皆在同一个有编号的星球上就可以了,并且这两个人均可以站在原地等另外一个人。也就是说,在这里我们不考虑两人在宇宙中间相遇。
输入数据第一行:N和M(用空格隔开) 表示这是一个N个点的图并且有M条边
第二行到第M+1行 为这个图的详细信息。
每行共有被空格隔开的三个数:a b c。表示编号为a的星球到编号为b的星球
有一个双向边,并且要过这条双向边所需要花费的时间为c。
最后一行有两个数:Y和T,Y表示黎恒健所在星球(也就是月球),T表示YJY所处的
星球(也就是天狼星)
输出只有一行,D,表示二者"相遇"的最短时间。当然,如果无法相遇则输出"They are all died!"
3 3
1 2 1
2 3 1
1 3 1
1 3
1
[数据范围]每组都是n=5000 m=5000 并且保证运算过程中的所有值都不会超过117901063
#include <cstring>
#include <cstdio>
#include <queue>
#define N 5005
using namespace std;
bool vis[N];
int n,m,S,T,cnt,ans=0x7fffffff,far[][N],to[N<<],val[N],head[N],nextt[N<<];
struct node
{
int x,y;
bool operator<(node a)const
{
return y>a.y;
}
};
priority_queue<node>q;
void dijkstra(int s,int *dis)
{
memset(vis,,sizeof(vis));
for(int i=;i<=n;++i) dis[i]=0x7fffffff;
dis[s]=;
q.push((node){s,dis[s]});
for(node now;!q.empty();)
{
now=q.top();q.pop();
if(vis[now.x]) continue;
vis[now.x]=true;
for(int i=head[now.x];i;i=nextt[i])
{
int v=to[i];
if(dis[v]>dis[now.x]+val[i])
{
dis[v]=dis[now.x]+val[i];
if(!vis[v]) q.push((node){v,dis[v]});
}
}
}
}
inline int min(int a,int b) {return a>b?b:a;}
inline int max(int a,int b) {return a>b?a:b;}
inline void ins(int u,int v,int w)
{
nextt[++cnt]=head[u];to[cnt]=v;val[cnt]=w;head[u]=cnt;
nextt[++cnt]=head[v];to[cnt]=u;val[cnt]=w;head[v]=cnt;
}
int main(int argc,char *argv[])
{
scanf("%d%d",&n,&m);
for(int a,b,c;m--;)
{
scanf("%d%d%d",&a,&b,&c);
ins(a,b,c);
}
scanf("%d%d",&S,&T);
dijkstra(S,far[]);
dijkstra(T,far[]);
for(int i=;i<=n;++i) ans=min(ans,max(far[][i],far[][i]));
ans!=0x7fffffff?printf("%d\n",ans):printf("They are all died!");
return ;
}
codevs 4052 黎恒健大战YJY的更多相关文章
- codevs 3289 花匠
题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...
- 3D坦克大战游戏源码
3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有2 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1228 苹果树 树链剖分讲解
题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- codevs 1052 地鼠游戏
1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...
随机推荐
- pure css简单组件,借鉴bootstrap
<!doctype html> <html> <head> <meta http-equiv="Content-type" content ...
- 在Android中使用Protocol Buffers(下篇)
本文来自网易云社区. FlatBuffers编码数组 编码数组的过程如下: 先执行 startVector(),这个方法会记录数组的长度,处理元素的对齐,准备足够的空间,并设置nested,用于指示记 ...
- AIM Tech Round 5 (rated, Div. 1 + Div. 2) D(SET,思维)
#include<bits/stdc++.h>using namespace std;const long long mod = 1e9+7;char s[370007][27];long ...
- 在 CentOS7 安装 ELK【转】
ELK是一个成熟的日志系统,主要功能有收集.分析.检索,详细见 elastic官网. 本文主要介绍如何在CentOS7下安装最新版本的ELK,当然现在docker已经有完全配置成功的elk容器,安装配 ...
- (四)从输入URL到页面加载发生了什么
一.从输入URL到页面加载发生了什么 1.在浏览器中输入URL 如:https://www.cnblogs.com/loveapple/ URL分成协议.地址.路径三部分 协议:http.https. ...
- P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows
题意:n个点,求凸包周长.(纯板子QAQ) 定义 凸包:用最小的凸多边形将n个点围在里面的图形为凸包 前置 向量:点积:(a,b) (c,d)=(a*c,b*d) =|(a,b)|*|(c,d)|*c ...
- 当重装eclipse后,给现有web项目添加tomcat的构建路径
在eclipse“首选项”-“service environment”中配置好tomcat后,给现有web项目添加构建路径: 1.选中一个web项目右键选中“构建路径”-“配置构建路径”
- UVA12230 过河 Crossing Rivers
题目描述 一个人每天需要从家去往公司,然后家与公司的道路是条直线,长度为 \(D\). 同时路上有 \(N\)条河,给出起点和宽度\(W_i\) , 过河需要乘坐速度为\(V_i\) 的渡船; 船在河 ...
- Migrations中的更新语句写法,摘要
public override void Up() { AlterColumn("dbo.Dispositions", "Property1", c => ...
- ACM-ICPC 2018 南京赛区网络预赛 J sum (找一个数拆成两个无平方因子的组合数)
题目大意:就是找一个数拆成两个无平方因子的组合数,然后求个前缀和 ; 分析:运用筛法的思想 , 因为有序对是由两个合法的数字组成的,所以只要保证第一个数合法,第二个数也合法就行,找出合法的第二个数 ...