Description:

题解:

显然满足二分性。

并且每一条边要不选l要不选r。

二分的那条链肯定要选l。

考虑有两个人在走最短路,一个人一开始必须走二分的那条链,要求第一个人走的比第二个人快。

安排的话也比较简单,第一人先走到这条边就给l,第二个人就给r。

还有一种想法,先只给二分的链l,其它都给r,跑一遍最短路,设为dis1。

然后再从二分的链的结尾开始,每条边都设为l,跑最短路,dis2。

然后一个点x的dis2[x]+二分的链长<=dis1[x],那么就可以走这个点,否则不能走,最后看能不能走到终点。

两个做法本质有一点点相似。

Code:

#include<bits/stdc++.h>
#define fo(i, x, y) for(int i = x, B = y; i <= B; i ++)
#define ff(i, x, y) for(int i = x, B = y; i < B; i ++)
#define fd(i, x, y) for(int i = x, B = y; i >= B; i --)
#define ll long long
#define pp printf
#define hh pp("\n")
using namespace std; const int N = 2e5 +5; int n, m, p, b[N]; struct edge {
int x, y, l, r;
} a[N]; int fi[N], nt[N], to[N], tot;
void link(int x, int y) {
nt[++ tot] = fi[x], to[tot] = y, fi[x] = tot;
} struct P {
int x; ll y;
P(int _x = 0, ll _y = 0) {
x = _x, y = _y;
}
}; bool operator < (P a, P b) {
return a.y > b.y;
} priority_queue<P> q; int ky[N];
ll dis[N], dis2[N];
int us[N][2]; int pd(int mi) {
fo(i, 1, n) fo(j, 0, 1) us[i][j] = 0;
fo(i, 1, m) ky[i] = 0;
fo(i, 1, mi) ky[b[i]] = 1;
fo(i, 1, n) dis[i] = dis2[i] = 1e18;
ll sb = 0; dis[1] = 0;
fo(i, 1, mi) {
sb += 2 * a[b[i]].l;
dis[a[b[i]].y] = sb;
if(i < mi && a[b[i]].y == 2) return 0;
}
q.push(P(a[b[mi]].y, sb));
dis2[1] = 1; q.push(P(1, 1));
while(q.size()) {
P b;
while(q.size()) {
b = q.top(); q.pop();
if(us[b.x][b.y & 1]) continue;
break;
}
if(us[b.x][b.y & 1]) continue;
us[b.x][b.y & 1] = 1;
for(int i = fi[b.x]; i; i = nt[i]) {
int y = to[i];
ll z = b.y;
if(!ky[i]) ky[i] = (b.y & 1) + 1;
z += ky[i] == 1 ? a[i].l * 2 : a[i].r * 2;
if(b.y & 1) {
if(z < dis2[y]) {
dis2[y] = z;
q.push(P(y, dis2[y]));
}
} else {
if(z < dis[y]) {
dis[y] = z;
q.push(P(y, dis[y]));
}
}
}
}
return dis[2] <= dis2[2];
} int main() {
freopen("travel.in", "r", stdin);
freopen("travel.out", "w", stdout);
scanf("%d %d %d", &n, &m, &p);
fo(i, 1, m) {
scanf("%d %d %d %d", &a[i].x, &a[i].y, &a[i].l, &a[i].r);
link(a[i].x, a[i].y);
}
fo(i, 1, p) scanf("%d", &b[i]);
int as = 0;
for(int l = 1, r = p; l <= r; ) {
int mi = l + r >> 1;
if(pd(mi)) l = mi + 1; else as = mi, r = mi - 1;
}
if(as == 0) pp("No Response!\n"); else pp("%d\n", b[as]);
}

【NOIP2019模拟2019.11.13】旅行 && GDKOI2018 还念(二分答案+dij)的更多相关文章

  1. 6424. 【NOIP2019模拟2019.11.13】我的订书机之恋

    题目描述 Description Input Output Sample Input 见下载 Sample Output 见下载 Data Constraint 题解 lj题卡线段树 求出每个右端点往 ...

  2. 「考试」noip模拟9,11,13

    9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...

  3. 6362. 【NOIP2019模拟2019.9.18】数星星

    题目描述 题解 一种好想/好写/跑得比**记者还快的做法: 对所有询问排序,按照R递增的顺序来处理 维护每个点最后一次被覆盖的时间,显然当前右端点为R时的答案为所有时间≥L的点的权值之和 LCT随便覆 ...

  4. 【NOIP2019模拟2019.10.07】果实摘取 (约瑟夫环、Mobius反演、类欧、Stern-Brocot Tree)

    Description: 小 D 的家门口有一片果树林,果树上果实成熟了,小 D 想要摘下它们. 为了便于描述问题,我们假设小 D 的家在二维平面上的 (0, 0) 点,所有坐标范围的绝对值不超过 N ...

  5. 6383. 【NOIP2019模拟2019.10.07】果实摘取

    题目 题目大意 给你一个由整点组成的矩形,坐标绝对值范围小于等于\(n\),你在\((0,0)\),一开始面向\((1,0)\),每次转到后面第\(k\)个你能看到的点,然后将这条线上的点全部标记删除 ...

  6. 6380. 【NOIP2019模拟2019.10.06】小w与最长路(path)

    题目 题目大意 给你一棵树,对于每一条边,求删去这条边之后,再用一条边(自己定)连接两个连通块,形成的树的直径最小是多少. 正解 首先,将这棵树的直径给找出来.显然,如果删去的边不在直径上,那么答案就 ...

  7. 6371. 【NOIP2019模拟2019.9.28】基础图论练习题

    题目 题目大意 维护一个无向图的割边条数,支持加边和删边. 正解 (PS:这是我很久之前在OJ上打出来的题解,现在直接copy过来) 题解只有一句话,估计没多少人可以看得懂.感觉出题人偷懒不想写题解- ...

  8. 6368. 【NOIP2019模拟2019.9.25】质树

    题目 题目大意 有个二叉树,满足每个点跟它的所有祖先互质. 给出二叉树的中序遍历的点权,还原一种可能的方案. 思考历程 首先想到的当然是找到一个跟全部互质的点作为根,然后左右两边递归下去处理-- 然而 ...

  9. 6367. 【NOIP2019模拟2019.9.25】工厂

    题目 题目大意 给你一堆区间,将这些区间分成特定的几个集合,使得每个集合中的所有区间的并不为空. 求最大的每组区间的交的长度之和. 思考历程 一开始就认为这绝对是\(DP\)-- 试着找一些性质,结果 ...

随机推荐

  1. Makefile中的$@ $< $^的意义

    $@  目标文件 $<   第一个依赖文件 $^  所有的依赖文件 $? 比目标还要新的依赖文件列表 $%  仅当目标是函数库文件中,表示规则中的目标成员名 $+  所有依赖目标的集合,与$^类 ...

  2. 【优化】Java开发中注意内存问题,影响JVM

    1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控 ...

  3. PHP curl_multi_add_handle函数

    curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄 说明 int curl_multi_add_handle ( resource $mh , resourc ...

  4. wangeditor 粘贴word内容带样式

    这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用 后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下) ...

  5. 关于12306Bypass-分流抢票

    12306Bypass-分流抢票-2013-15年          官网:http://www.12306bypass.com 分流抢票是一款完全免费的抢票软件,请抵制淘宝贩卖等诈骗行为 作者不会授 ...

  6. [HDU4969]Just a Joke

    题目:Just a Joke 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4969 分析: 呀,根本不会做,5555~(逃 http://blog.cs ...

  7. linux配置防火墙 Centos7下 添加 端口白名单

    最近在阿里云服务器centos7上部署项目 要开启8484端口 , CentOS 7默认使用的是firewall作为防火墙 在firewall下开启端口白名单 1.查看下防火墙的状态:systemct ...

  8. QString的arg方法

    第一个参数是要填充的数字,第二个参数为最小宽度,第三个参数为进制,第四个参数为当原始数字长度不足最小宽度时用于填充的字符,如 QString name=QString("R%1C%2&quo ...

  9. 小程序UI自动化(一):appium小程序自动化尝试

    appium 进行 小程序自动化尝试: 由于工作中进行app自动化用的是appium,故首先尝试用appium进行小程序自动化,以美团小程序为例(python脚本实现) 一.配置基础信息 启动微信ap ...

  10. 转载:LESS基本用法

    转载出处:https://blog.csdn.net/qq_38209578/article/details/80566860 转载出处:https://blog.csdn.net/weixin_44 ...