题目链接


首先,做这样的处理,把每个点的时间分割为几个区间,说明在这个区间内的时候,人在这个点内,那么,我们就有这样的选择,如果在这个区间内,或者区间之前抵达,就说明是可以碰见的,如果在这个区间之后抵达,就说明是见不到的了,所以跑最短路,如果在最短路时间抵达这个点的时候,能找到答案的话,更新答案,并记录即可。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
//#include <unordered_map>
//#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f3f3f3f3f
#define eps 1e-8
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define MP(a, b) make_pair(a, b)
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 1e5 + 7, maxM = 1e6 + 7;
int N, M, S, T, Q, head[maxN], cnt, a[maxN];
struct Eddge
{int nex, to; ll val;Eddge(int a=-1, int b=0, ll c=0):nex(a), to(b), val(c) {}
}edge[maxM];
inline void addEddge(int u, int v, ll w)
{edge[cnt] = Eddge(head[u], v, w);head[u] = cnt++;
}
inline void _add(int u, int v, ll w) { addEddge(u, v, w); addEddge(v, u, w); }
struct P
{int id; ll tim;P(int a=0, ll b=0):id(a), tim(b) {}friend bool operator < (P e1, P e2) { return e1.tim < e2.tim; }
} que[maxN];
struct node
{ll L, R;node(ll a=0, ll b=0):L(a), R(b) {}friend bool operator < (node e1, node e2) { return e1.R < e2.R; }
};
vector<node> vt[maxN];
ll dis[maxN];
struct Pri_node
{int id; ll val;Pri_node(int a=0, ll b=0):id(a), val(b) {}friend bool operator < (Pri_node e1, Pri_node e2) { return e1.val > e2.val; }
} now;
priority_queue<Pri_node> qq;
ll ans = INF;
inline void Dijkstra()
{for(int i=1; i<=N; i++) dis[i] = INF;dis[S] = 0;qq.push(Pri_node(S, 0));int u, len, id; ll w, tmp;while(!qq.empty()){now = qq.top(); qq.pop();u = now.id;if(now.val > dis[u]) continue;len = (int)vt[u].size();id = (int)(lower_bound(vt[u].begin(), vt[u].end(), node(dis[u], dis[u])) - vt[u].begin());if(id < len){tmp = max(dis[u], vt[u][id].L);ans = min(ans, tmp);}for(int i=head[u], v; ~i; i=edge[i].nex){v = edge[i].to; w = edge[i].val;if(dis[v] > dis[u] + w){dis[v] = dis[u] + w;qq.push(Pri_node(v, dis[v]));}}}
}
inline void init()
{cnt = 0;for(int i=1; i<=N; i++) head[i] = -1;
}
int main()
{scanf("%d%d%d%d", &N, &M, &S, &T);init();for(int i=1, u, v, w; i<=M; i++){scanf("%d%d%d", &u, &v, &w);_add(u, v, w);}scanf("%d", &Q);for(int i=1, pos, tim; i<=Q; i++){scanf("%d%d", &tim, &pos);que[i] = P(pos, tim);}que[++Q] = P(T, 0);sort(que + 1, que + Q + 1);for(int i=1, id; i<Q; i++){id = que[i].id;vt[id].push_back(node(que[i].tim, que[i + 1].tim - 1));}vt[que[Q].id].push_back(node(que[Q].tim, INF));Dijkstra();printf("%lld\n", ans);return 0;
}

抓住czx【最短路】相关推荐

  1. Luvwgyx的娱乐场-题解

    题解不按顺序给出 目录: ycz的妹子 题面 题解 lty loves 96! 题面 题解 mzf的考验 题面 题解 hby与tkw的基情 题面 题解 抓住czx 题面 题解 ycz的妹子 题目背景: ...

  2. 算法提高课-搜索-最短路模型-AcWing 1100. 抓住那头牛:bfs

    题目分析 来源:acwing 分析:bfs求最短步数,需要dist[]数组来记录最短步数. ac代码 #include<bits/stdc++.h> using namespace std ...

  3. 【搜索专题】BFS中的Flood Fill和最短路模型

    整理的算法模板合集: ACM模板 A.AcWing 1097. 池塘计数 基础模板题练练手 #include<iostream> #include<cstdio> #inclu ...

  4. Escape The Maze (hard version) 多源最短路,bfs(1900)

    题意 : 如上题easy version,求出最少的朋友数量,使得只有这些朋友在迷宫中时,无论vlad如何走,都能抓住vlad 思路 : 同样先求出所有朋友到达其他点的最短路,在vlad的bfs中,如 ...

  5. Escape The Maze (easy version) 多源最短路,bfs(1700)

    题意 : 在一颗树形迷宫中,一共有n个结点,有k个vlad的朋友,分别在x1,x2,...x_1,x_2,...x1​,x2​,...结点.vlad从1号结点出发,问,在所有朋友都同时移动的同时,vl ...

  6. 如何避免大脑短路?用心理学分析重庆公交车坠江案

    一.坠江事故的残酷真相 10月28日10时许,重庆市万州区一大巴车在万州长江二桥桥面与小轿车发生碰撞后,坠入江中,15人因此遇难,引发众多媒体和网友关注.车辆打捞上岸后,经重庆市鑫道交通事故司法鉴定所 ...

  7. 经典最短路算法的原理启示

    算法其实都差不多了,更重要的是对算法本身的理解,而不是根据题目去熟悉算法 floyd代码极其简短,只有几行: for(i=1;i<=n;i++) for(j=1;j<=n;j++) for ...

  8. 2020牛客寒假算法基础集训营3——J.牛牛的宝可梦Go【最短路 DP(01背包) 复杂度优化】(附优化分析)

    题目传送门 题目描述 牛牛所在的W市是一个不太大的城市,城市有n个路口以及m条公路,这些双向连通的公路长度均为1,保证你可以从一个城市直接或者间接移动到所有的城市.牛牛在玩宝可梦Go,众所周知呢,这个 ...

  9. 电路串联和并联图解_电路的组成和连接方式-通路、开路、短路,设计串并联电路图详解...

    01要点一.认识电路 1.用电器:利用电来工作的器件叫作用电器. 2.电源:能够向用电器提供电的器件叫作电源. 3.开关:在电路中控制电路通断的器件叫作开关. 4.导线:把用电器.电源和开关连接起来. ...

最新文章

  1. 小手段:开启 GNOME 的窗口分组效果
  2. VTK:图片之ImageMagnitude
  3. DDD领域驱动设计理论篇 - 学习笔记
  4. transition:background-color .3s 背景色 - 渐变效果
  5. 系统时钟(汇编语言程序设计)
  6. 大数据之-Hadoop源码编译_源码编译具体流程_以及编译步骤---大数据之hadoop工作笔记0046
  7. 有时候能讲出来,比沉默要好吧
  8. android 输入支付密码错误,Android 支付宝支付密码输入界面
  9. 计算机网络技术专业职业能力分析的结论与成效
  10. android 看图片tv版,易图浏览_易图浏览TV版APK下载_电视版 for 安卓TV_ZNDS软件
  11. mysql 字符集 表情_MySQL字符集(表情包)
  12. 适用智能电表,热能表,气表等段码LCD液晶显示驱动芯片I2C 接口VK2C22A/B,RAM映射44*4, 40*4
  13. 勉励自己毕业前必须做到的几件事情
  14. Ubuntu 20.04 实现Windows 复制粘贴
  15. 如何实现Word、PDF、TXT文件的全文内容检索?
  16. 如何采集QQ群中所有成员QQ号码
  17. 不同强度等级下混凝土的弹性模量、轴心抗压强度标准值fck、轴心抗拉强度标准值ftk、轴心抗压强度设计值fcd、轴心抗拉强度设计值ftd (规范值)
  18. 用joern画AST、CFG、CDG、DDG、PDG、CPG
  19. SqlServer入门学习总结(一)
  20. 统计大写字母、小写字母、数字出现的次数

热门文章

  1. 普里姆算法,克鲁斯卡尔算法
  2. NetSuite 中国现金流量表功能剖析
  3. 客户购买软件的心理曲线分析
  4. 奔驰c语言控制系统使用方法,奔驰主动车身控制ABC系统技术资料(三)
  5. 在 ABT 节点上启动 Solid 服务器 | ArcBlock 博客
  6. TOP100summit 2017:【案例分享】魅族持续交付平台建设实践
  7. iPhone和iPad开发中的图标大小和设置
  8. Zigbee/SiliconLabs解读sdk文档(2) —— 睡眠终端设备
  9. 重磅!IDEA 推出程序员专用字体!
  10. [RTT例程练习] 6.1 Finsh 的基本使用