显然,我们可以将询问按照规定时间从小到大排序,依次处理.

那么我们显然要求合法的点中从 $n$ 号点出发到达点 $i$ 的最迟时间,我们令这个为 $f[i]$

而 $f[i]$ 显然可以用最短路来求.

如果求 $n$ 次最短路的话显然超时,但是我们可以对于每一个节点所连边排序,然后每次枚举之前没有扩展过的边.

这样就能保证每条边恰好被扩展一次,时间复杂度正确.

code:

#include <bits/stdc++.h>
#define N 200004
#define inf 1000000004
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int cur,n,m;
int f[N],done[N],tag[N],ans[N];
struct Node {
int u,dis;
Node(int u=0,int dis=0):u(u),dis(dis){}
bool operator<(Node b) const { return b.dis>dis; }
};
struct ask {
int id,tim;
ask(int id=0,int tim=0):id(id),tim(tim){}
}as[N];
struct edge {
int to,st,ed;
edge(int to=0,int st=0,int ed=0):to(to),st(st),ed(ed){}
};
bool cmp_as(ask a,ask b) {
return a.tim<b.tim;
}
bool cmp(edge a,edge b) {
return a.ed<b.ed;
}
vector<edge>G[N];
priority_queue<Node>q;
void dij() {
while(!q.empty()) {
Node e=q.top(); q.pop();
int u=e.u;
if(done[u]==cur) continue;
done[u]=cur;
for(int i=tag[u];i<G[u].size();++i,++tag[u]) {
if(G[u][i].ed>f[u]) break;
int v=G[u][i].to;
if(f[v]<G[u][i].st) {
f[v]=G[u][i].st;
q.push(Node(v,f[v]));
}
}
}
}
void solve(int t) {
f[n]=t;
q.push(Node(n,f[n]));
dij();
}
int main() {
// setIO("input");
int i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i) {
int a,b,x,y;
scanf("%d%d%d%d",&a,&b,&x,&y);
G[b].push_back(edge(a,x,y));
}
memset(f,-1,sizeof(f));
f[n]=0;
for(i=1;i<=n;++i) {
sort(G[i].begin(),G[i].end(),cmp);
}
int Q;
scanf("%d",&Q);
for(i=1;i<=Q;++i) {
as[i].id=i;
scanf("%d",&as[i].tim);
}
sort(as+1,as+1+Q,cmp_as);
for(i=1;i<=Q;++i) {
cur=i;
solve(as[i].tim);
ans[as[i].id]=f[1];
}
for(i=1;i<=Q;++i)
printf("%d\n",ans[i]);
return 0;
}

  

BZOJ 4239: 巴士走读 最短路的更多相关文章

  1. 「JOISC 2014 Day1」巴士走读

    「JOISC 2014 Day1」巴士走读 将询问离线下来. 从终点出发到起点. 由于在每个点(除了终点)的时间被过来的边固定,因此如果一个点不被新的边更新,是不会发生变化的. 因此可以按照时间顺序, ...

  2. bzoj 1295 最长距离 - 最短路

    Description windy有一块矩形土地,被分为 N*M 块 1*1 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格 ...

  3. BZOJ 2763 分层图最短路

    突然发现我不会分层图最短路,写一发. 就是同层中用双向边相连,用单向边连下一层 #include <cstdio> #include <algorithm> #include ...

  4. BZOJ 2763: [JLOI2011]飞行路线 最短路

    2763: [JLOI2011]飞行路线 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  5. BZOJ 2750: [HAOI2012]Road( 最短路 )

    对于每个点都跑最短路, 然后我们得到了个DAG, 在这DAG上更新每条边的答案. 考虑e(u, v)∈DAG对答案的贡献:  假设从S到u得路径数为A[u], 从v出发到达任意点的路径数为B[v], ...

  6. BZOJ.2069.[POI2004]ZAW(最短路Dijkstra 按位划分)

    题目链接 \(Description\) 给定一张带权图(边是双向的,但不同方向长度不同).求从1出发,至少经过除1外的一个点,再回到1的最短路.点和边不能重复经过. \(n\leq5000,m\le ...

  7. BZOJ 1003 - 物流运输 - [最短路+dp]

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1003 Time Limit: 10 Sec Memory Limit: 162 MB D ...

  8. BZOJ4239 : 巴士走读

    考虑按时刻从早到晚模拟,计算出 f[i]:到达i点的最晚出发时间 g[i]:为了赶上第i辆车的最晚出发时间 然后将所有到达n号点的巴士按到达时间排序,查询的时候二分查找即可. 时间复杂度$O(n\lo ...

  9. BZOJ 1922--大陆争霸(最短路)

    1922: [Sdoi2010]大陆争霸 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2113  Solved: 947[Submit][Status ...

随机推荐

  1. React+Echarts简单的封装套路

    今天我们来介绍一下React中,对Echarts的一个简单的封装. 首先在我们的React项目中,想使用Echart包,首先需要先安装它,安装代码如下,任选一个就可以 cnpm install ech ...

  2. bootstrap 按钮组件

    按钮组件主要的类名: .btn-toolbar     把几个  .btn-group 组合在一起,更复杂的组件 .btn-group .btn-group-vertical   垂直堆叠显示    ...

  3. LwIP的udp学习笔记

    * Bind an UDP PCB. * * @param pcb UDP PCB to be bound with a local address ipaddr and port. * @param ...

  4. VFP的数据策略:高级篇

    VFP的数据策略:高级篇 引语 在“VFP中的数据策略:基础篇”一文中,我们研究了VFP应用程序中访问非VFP数据(如SQL Server)的不同机制:远程视图.SQL Passthrough.ADO ...

  5. apache/tomcat安装过程略

    apache/tomcat安装过程略 一些变量 apache安装目录 APACHE_PREFIX=/Data/app/apache apache配置文件 APACHE_CONF=/etc/httpd/ ...

  6. 关于simplememory theme的设置和感想

    前言 首先,这是我第一次自己个性化博客的主题.如果下文所写如有不妥之处还望大佬指出 参考 这次设置多亏了GitHub上的开源代码:https://github.com/BNDong/Cnblogs-T ...

  7. Java之GUI编程

    GUI编程 组建 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1.简介 GUI的核心技术:Swing AWT 为什么不流行? 界面不美观. 需要jre环境.(没必 ...

  8. Python股票量化 选股操作不好用 完结

    这几日,写了一些python的代码,打算来选择股票的, 那么这个思路和开始的一篇文章类似,你会不会被贾跃亭坑?,所以基本的思路也是这样的,举一个简单的例子,就是通过连续几年的ROE数据,和其他的一些财 ...

  9. springboot快速创建项目框架

    一.项目框架准备 1.1 新建maven空项目,并在pom中引入依赖 <parent> <groupId>org.springframework.boot</groupI ...

  10. 解决visual studio 2013编译过程中存在的无法打开kernel.lib问题

    1. 出现此类问题的原因 由于原visual studio文件中的安装中出现问题,所以原有的SDK(soft development kits)文件出现缺失: 2. 解决方法1 重新下载SDK工具,安 ...