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 ...
随机推荐
- thinkphp---display与fetch区别
区别: ① display方法直接输出模板文件渲染后的内容,fetch方法是返回模板文件渲染后的内容 ② 有时候我们不想直接输出模板内容,而是希望对内容再进行一些处理后输出, 就可以使用fetch方法 ...
- thrift python安装
http://thrift.apache.org/download/ tar -zxvf thrift-0.11.0.tar.gz cd thrift-0.11.0 ./configure --pre ...
- HTML5环形音乐播放器
在线演示 本地下载
- SDUT-2139_从起始点到目标点的最短步数(BFS)
数据结构实验之图论五:从起始点到目标点的最短步数(BFS) Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在古老的魔兽 ...
- Effective C++: 05实现
26:尽可能延后变量定义式的出现时间 1:只要你定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序的控制流到达这个变量定义式时,你便得承受构造成本:当这个变量离开其作用域时,你便得承受析构成 ...
- Android中解析Json数据
在开发中常常会遇到解析json的问题 在这里总结几种解析的方式: 方式一: json数据: private String jsonData = "[{\"name\":\ ...
- 捕捉WPF应用程序中XAML代码解析异常
原文:捕捉WPF应用程序中XAML代码解析异常 由于WPF应用程序中XAML代码在很多时候是运行时加载处理的.比如DynamicResource,但是在编译或者运行的过程中,编写的XAML代码很可能有 ...
- C++与JAVA代码实现CRC-16/MODBUS算法,且与 http://www.ip33.com/crc.html 进行结果验证
CRC-16/MODBUS的多项式为:x16+x15+x2+1(8005),宽度为16.运算时,首先将一个16位的寄存器预置为11111111 11111111,然后连续把数据帧中的每个字节中的8位与 ...
- 2018-9-30-C#-从零开始写-SharpDx-应用-画三角
title author date CreateTime categories C# 从零开始写 SharpDx 应用 画三角 lindexi 2018-09-30 18:30:14 +0800 20 ...
- 【牛腩视频】之SQL触发器 标签: 数据库 2015-05-23 09:44 1339人阅读 评论(40) 收藏
之前在学习机房管理系统.net版的时候,已经写过了关于数据库的操作,但是现在开始学习牛腩,才发现之前自己理解的太浅显,很多东西看似好像会了,不去实际操作一下,不把代码从头到尾敲出来,到头来还是不会,所 ...