面基之路

题目链接:UNR #6 A

题目大意

给你一个无向图,然后每条边有长度,然后你在 1 号点,有不超过 20 个人在各自的点,每个人每个单位时间能走一个单位长度。
然后问你最少要多久才能依次跟所有人相遇。(可以在边上)

思路

首先发现顺序没问题,就是要这些人会和。
然后发现自己也不是特殊的,所以问题就是走到一个地方的时间的 max⁡\maxmax 取 min⁡\minmin。

(直接每个点为起点跑 dij 得到到每个位置的距离)
然后首先可以枚举每个点,然后考虑边。
考虑弄一个分界点,如果到左边点的距离小于等于分界点,那就走到左边的点,否则走到右边的点。
那分界点只要枚举每个点到左边点的距离即可。

然后好了。

代码

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define INF 0x3f3f3f3f3f3f3f3fusing namespace std;const int N = 1e5 + 100;
struct node {int x, to, nxt;
}e[N << 2];
int n, m, k, pl[21], X[N << 1], Y[N << 1], Z[N << 1], le[N], KK;
ll dis[21][N], ans;
priority_queue <pair<ll, int>, vector<pair<ll, int> >, greater<pair<ll, int> > > q;
bool in[N];void add(int x, int y, int z) {e[++KK] = (node){z, y, le[x]}; le[x] = KK;} void get_dis(ll *dis, int S) {while (!q.empty()) q.pop(); q.push(make_pair(0, S));dis[S] = 0;memset(in, 0, sizeof(in));while (!q.empty()) {int now = q.top().second; q.pop();if (in[now]) continue; in[now] = 1;for (int i = le[now]; i; i = e[i].nxt)if (dis[e[i].to] > dis[now] + e[i].x) {dis[e[i].to] = dis[now] + e[i].x;q.push(make_pair(dis[e[i].to], e[i].to));}}
}int main() {//  freopen("ex_trip4.in", "r", stdin);scanf("%d %d", &n, &m);for (int i = 1; i <= m; i++) {int x, y, z; scanf("%d %d %d", &x, &y, &z); z *= 2; X[i] = x; Y[i] = y; Z[i] = z;add(x, y, z); add(y, x, z);}scanf("%d", &k); for (int i = 1; i <= k; i++) scanf("%d", &pl[i]); pl[0] = 1;memset(dis, 0x7f, sizeof(dis));for (int i = 0; i <= k; i++) get_dis(dis[i], pl[i]);ans = INF;for (int i = 1; i <= n; i++) {ll now = 0; for (int j = 0; j <= k; j++) now = max(now, dis[j][i]);ans = min(ans, now);}for (int i = 1; i <= m; i++) {int x = X[i], y = Y[i], z = Z[i];for (int j = 0; j <= k; j++) {ll now1 = 0, now2 = 0;for (int jj = 0; jj <= k; jj++)if (dis[jj][x] <= dis[j][x]) now1 = max(now1, dis[jj][x]);else now2 = max(now2, dis[jj][y]);if (now1 > now2) swap(now1, now2);if (now1 + z <= now2) ans = min(ans, now2);else ans = min(ans, (now1 + now2 + z) / 2);}}printf("%lld", ans);return 0;
}

【UNR #6 A】面基之路(最短路)相关推荐

  1. CSU——2161: 漫漫上学路 最短路

    Description 众所周知,CSU(California State)University) 的上课地点距离学生公寓很远,对于爱睡懒觉的小Z来说,每天去上课就成了一件非常头疼的事,如果有早课的话 ...

  2. QBXT 2018春季DP图论班 2018.4.29 --- 最短路差分约束

    *钟皓曦老师授课* 常见最短路算法: Floyd → O(n^3) //floydint dist[maxn][maxn];memset(dist,0x3f,sizeof(dist)); for (i ...

  3. Android教程-Java基础2 语法与关系运算

    第二课  switch 语句 1 java switch 语句的概述~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ switch(表达式){ case 常量: 代码1 break c ...

  4. java窗口how2j_How2J Java 基础

    Hello World 配置环境 假如 JDK 解压缩后的包在 /home/cunyu/soft/jdk-11.0.7 目录,则在 /etc/profile 文件中加入如下配置: JAVA_HOME ...

  5. 趣谈程序员真香定律:源码即设计

    来源 | 码砖杂役 责编 | Carol 封图 | CSDN 付费下载自视觉中国 我们经常谈论架构,讨论设计,却甚少关注实现和代码本身,架构和设计固然重要,但要说代码本身不重要,我不同意,Robert ...

  6. 放大电路分析方法、图解法分析放大电路

    放大电路分析方法.图解法分析放大电路 一.本文介绍的定义 二.放大电路分析方法 三.图解法 一.本文介绍的定义 放大电路分析.图解法.微变等效电路法.静态分析.动态分析.直流通路.交流通路.单管共射放 ...

  7. hdu2157:How many ways??

    n<=20个点m<=100条边有向图不带权,t个询问问Ai到Bi的经过k<=20条边方案数多少. f[i][j]--i到j的方案数,,初始化成初邻接矩阵,这样做一次就得到2条路最短路 ...

  8. 【华为云技术分享】程序员真香定律:源码即设计

    我们经常谈论架构,讨论设计,却甚少关注实现和代码本身,架构和设计固然重要,但要说代码本身不重要,我不同意,Robert C.Martin大叔也不同意,Martin认为"源码即设计" ...

  9. 为什么谐振时电抗为0_高压直流输电(LCC-HVDC 和 MMC-HVDC)中平波电抗器的作用和选择策略...

    一.平波电抗器(smoothing reactor)在 LCC 中的作用: 1. 抑制直流电流纹波分量: 2. 在低功率传输时避免电流断续: 3. 限制直流系统故障或受扰动时直流电流上升的速率和幅值( ...

最新文章

  1. 7135制作自动量程电压切换_基于数字电压表的直流电位差计自动检定装置的讨论...
  2. spring定时注解方式定时写到xml里面融合
  3. WordPress添加背景音乐
  4. Java基础学习总结(30)——Java 内存溢出问题总结
  5. python r语言接口_R语言,python接口rpy2安装的问题
  6. 批量修改文件名称的方法
  7. 【探索PowerShell 】【七】变量
  8. BP神经网络预测matlab代码实现
  9. 微软服务器安全补丁,Microsoft Windows SMB服务器安全更新(4013389)补丁 官方勒索病毒漏洞修复版(图文)...
  10. 微波雷达智能感应模块,在智能面板上的技术应用
  11. 标题:《东邪西毒》台词全本(国语版) (转)
  12. 网络安全课第九节 网络安全攻防实战
  13. 用 Web 技术为 Safari 编写扩展
  14. SpringSecurity实战(四)-集成图片验证码-过滤器方式实现
  15. 基于Qt开发的AES文件加解密工具
  16. 微信小程序开发2.框架-视图层-WXS
  17. x265-1.8版本-common/pixel.cpp注释
  18. c语言read有什么作用,c语言read函数读到什么结束
  19. vue路由传参—params—query
  20. 离散傅里叶变换-DFT(FFT基础)

热门文章

  1. 数据结构考研大纲浅析
  2. OSPF之LSA详解
  3. javascript-qrcode.js教程
  4. android圆形图片,圆形背景文字的CircleTextImageView开源组件
  5. php导出excel 细边框,phpexcel设置边框不全或者只有竖线问题解决 方法
  6. intell idea 使用mave打springboot包的插件
  7. 2019.06.28(day01)_java大数据课程体系
  8. 【Linux】工具(3)——gcc/g++
  9. Java多态性:Java什么是多态?
  10. C语言编程中void什么意思,程序设计中遇到的void到底是什么意思