CF1163F Indecisive Taxi Fee
NOIP之前留的坑
经典问题:删边最短路
任意找一条最短路E,给E上的点和边新加入一个1~len的编号
最短路上的边变大麻烦
维护l[x],r[x],从1到x最短路最后一个,x到n最短路第一个 在E上的点的编号
特别地,当x在E上时,显然有l[x]=r[x]=id[x]
然后枚举不在最短路上的边,线段树进行覆盖即可
不经过边e的最短路一定会覆盖到e上的(也不取决于最短路树什么样)
所以三遍dij
只要回来重新把在E上的x,l[x]=r[x]=id[x]即可
注意必须这样!
否则可能把经过的边也尝试最小化了。
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define pb push_back
#define solid const auto &
#define enter cout<<endl
#define pii pair<int,int>
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');} namespace Miracle{
const int N=2e5+;
const int M=2e5+;
const ll inf=0x3f3f3f3f3f3f3f3f;
int n,m,Q;
struct edge{
int x,y,z;
}b[M];
int vis[N];
int pre[N];
int on[N],is[M];
int up,id[N],bi[M];
struct node{
int nxt,to,val;
}e[*M];
int hd[N],cnt=;
void add(int x,int y,int z){
e[++cnt].nxt=hd[x];e[cnt].to=y;e[cnt].val=z;
hd[x]=cnt;
}
struct po{
int id;ll val;
po(){}
po(int dd,ll vv){
id=dd;val=vv;
}
bool friend operator <(po a,po b){
return a.val>b.val;
}
};
priority_queue<po>q;
ll dis[][N];
void init(){
memset(dis[],0x3f,sizeof dis[]);
dis[][n]=;
q.push(po(n,));
while(!q.empty()){
po now=q.top();q.pop();
if(vis[now.id]) continue;
int x=now.id;
vis[x]=;
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(dis[][y]>dis[][x]+e[i].val){
dis[][y]=dis[][x]+e[i].val;
pre[y]=i;
q.push(po(y,dis[][y]));
}
}
}
} int lim[N][];
void dij(int typ){
memset(dis[typ],0x3f,sizeof dis[typ]);
memset(vis,,sizeof vis);
while(!q.empty()) q.pop();
if(typ) q.push(po(n,)),dis[][n]=;
else q.push(po(,)),dis[][]=; while(!q.empty()){
po now=q.top();q.pop();
if(vis[now.id]) continue;
int x=now.id;
vis[x]=;
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(dis[typ][y]>dis[typ][x]+e[i].val){
dis[typ][y]=dis[typ][x]+e[i].val;
if(on[x]){
lim[y][typ]=id[x];
}else{
lim[y][typ]=lim[x][typ];
}
q.push(po(y,dis[typ][y]));
}
}
}
}
struct tr{
ll mi;
tr(){mi=inf;}
}t[*N];
#define mid ((l+r)>>1)
void chan(int x,int l,int r,int L,int R,ll c){
if(L<||R>up) return;
if(L<=l&&r<=R){
t[x].mi=min(t[x].mi,c);return ;
}
if(L<=mid) chan(x<<,l,mid,L,R,c);
if(mid<R) chan(x<<|,mid+,r,L,R,c);
}
void query(int x,int l,int r,int p,ll &ans){
if(l==r) {
ans=min(ans,t[x].mi);return;
}
ans=min(ans,t[x].mi);
if(p<=mid) query(x<<,l,mid,p,ans);
else query(x<<|,mid+,r,p,ans);
}
int main(){
rd(n);rd(m);rd(Q);
int x,y,z;
for(reg i=;i<=m;++i){
rd(x);rd(y);rd(z);
add(x,y,z);add(y,x,z);b[i].x=x;b[i].y=y;b[i].z=z;
}
init();
x=;
while(x){
on[x]=;
is[pre[x]/]=;
++up;
id[x]=up;
bi[pre[x]/]=up;
x=e[pre[x]^].to;
}
dij();dij();
for(reg i=;i<=n;++i){
if(on[i]){
lim[i][]=lim[i][]=id[i];
}
}
lim[][]=;lim[n][]=up;
for(reg i=;i<=m;++i){
int x=b[i].x,y=b[i].y;
if(!is[i]){
ll len=dis[][x]+dis[][y]+b[i].z;
if(lim[x][]<=lim[y][]-) chan(,,up,lim[x][],lim[y][]-,len);
len=dis[][x]+dis[][y]+b[i].z;
if(lim[y][]<=lim[x][]-) chan(,,up,lim[y][],lim[x][]-,len);
}
}
while(Q--){
rd(x);rd(z);
ll ans=inf;
if(is[x]){
if(z<=b[x].z){
ans=dis[][n]-(b[x].z-z);
}else{
query(,,up,bi[x],ans);
ans=min(ans,min(dis[][b[x].x]+dis[][b[x].y]+z,dis[][b[x].x]+dis[][b[x].y]+z));
}
}else{
ans=min(dis[][n],min(dis[][b[x].x]+dis[][b[x].y]+z,dis[][b[x].x]+dis[][b[x].y]+z));
}
printf("%lld\n",ans);
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
*/
CF1163F Indecisive Taxi Fee的更多相关文章
- CF1163F Indecisive Taxi Fee(线段树+图论)
做法 这里的修改是暂时的 找到一条最短路径\(E\),需要考虑的是将最短路径上的边增大 每个点考虑与\(1/n\)的最短路径在E上前缀/后缀的位置,设\(L_i,R_i\) 考虑每条边\((u,v)\ ...
- POJ 4046 Sightseeing
Sightseeing Time Limit: 5000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID ...
- A cost-effective recommender system for taxi drivers
一个针对出租车司机有效花费的推荐系统 摘要 GPS技术和新形式的城市地理学改变了手机服务的形式.比如说,丰富的出租车GPS轨迹使得出做租车领域有新方法.事实上,最近很多工作是在使用出租车GPS轨迹数据 ...
- [ACM_数学] Taxi Fare [新旧出租车费差 水 分段函数]
Description Last September, Hangzhou raised the taxi fares. The original flag-down fare in Hangzhou ...
- zjuoj 3600 Taxi Fare
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3600 Taxi Fare Time Limit: 2 Seconds ...
- The 9th Zhejiang Provincial Collegiate Programming Contest->Problem A:A - Taxi Fare
Problem A: Taxi Fare Time Limit: 2 Seconds Memory Limit: 65536 KB Last September, Hangzhou raised th ...
- 【HDU1960】Taxi Cab Scheme(最小路径覆盖)
Taxi Cab Scheme Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- poj 2060 Taxi Cab Scheme (二分匹配)
Taxi Cab Scheme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5710 Accepted: 2393 D ...
- FEE Development Essentials
FEE Development Essentials JS Basic function call() and apply() func1.bind(thisObj,arg1...argn) Cust ...
随机推荐
- 【滴水石穿】rn
这个项目还不错,还比较全 先放项目地址:https://github.com/ShionHXC/rn 项目算是一个完整的APP 有用到redux-thunk存储数据,算的上是一个普通的比较完整的APP ...
- Ajax--Ajax基于原生javascript:创建Ajax对象、链接服务器、发送请求、接受响应结果
Ajax概述 异步:指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步. 同步请求: 请求是由浏览器发送 页面会刷新 异步请求: 请求是由浏览器的一 ...
- Sublime Text2的常用技巧总结(更新中...)
1. 选中一段内容后,按 Tab 或者 shift Tab 可以控制缩进 2. alt + shift + 数字, 开启多个窗口,数字代表分割后的个数,分割后按 Ctrl + shift + 数字 可 ...
- SpringBoot Actuator监控【转】
springboot actuator 监控 springboot1.5和springboot2.0 的actuator在启动日志上的差异就很大了. springboot1.5在启动时会打印很多/XX ...
- 程序中提醒用户进去App Store 评分 跳转 代码
大家都知道,评论和评分是决定app在appstore中排名的重要因素,但是大部分用户下载安装APP后却不会去点评,所以添加提示用户去点评的功能是很必要的,如下是代码: 很多用户用了好软件 ...
- iOS学习系列 - 扩展机制category与associative
iOS学习系列 - 扩展机制category与associative category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 ...
- weixin 微信开放平台 微信公众平台
官网地址入口 微信小程序 https://mp.weixin.qq.com/ appid and openid not match 1.appid :是公众号的ID. 2.openid:关注公众号生成 ...
- 百度语音识别REST API用法(含JAVA代码)——不须要集成SDK的方法
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zpf8861/article/details/32329457 上一篇文章http://blog.c ...
- Codeforces 662D International Olympiad【贪心】
比赛的时候后缀长度在4位以内的时候分类讨论了一下,其实他们完全是一个套路的..并不需要讨论. 然后没有考虑前导0的情况,就wa了.. 题目链接: http://codeforces.com/probl ...
- 从零学React Native之01创建第一个程序
本篇首发于简书 欢迎关注 上一篇文章是时候了解React Native了介绍了React Native.大家应该对React Native有个初步的认识. 接下来我们就可以初始化一个React Nat ...