NOIP之前留的坑

CF1163F Indecisive Taxi Fee

经典问题:删边最短路

在Ta的博客查看

任意找一条最短路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的更多相关文章

  1. CF1163F Indecisive Taxi Fee(线段树+图论)

    做法 这里的修改是暂时的 找到一条最短路径\(E\),需要考虑的是将最短路径上的边增大 每个点考虑与\(1/n\)的最短路径在E上前缀/后缀的位置,设\(L_i,R_i\) 考虑每条边\((u,v)\ ...

  2. POJ 4046 Sightseeing

    Sightseeing Time Limit: 5000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID ...

  3. A cost-effective recommender system for taxi drivers

    一个针对出租车司机有效花费的推荐系统 摘要 GPS技术和新形式的城市地理学改变了手机服务的形式.比如说,丰富的出租车GPS轨迹使得出做租车领域有新方法.事实上,最近很多工作是在使用出租车GPS轨迹数据 ...

  4. [ACM_数学] Taxi Fare [新旧出租车费差 水 分段函数]

    Description Last September, Hangzhou raised the taxi fares. The original flag-down fare in Hangzhou ...

  5. zjuoj 3600 Taxi Fare

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3600 Taxi Fare Time Limit: 2 Seconds    ...

  6. 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 ...

  7. 【HDU1960】Taxi Cab Scheme(最小路径覆盖)

    Taxi Cab Scheme Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  8. poj 2060 Taxi Cab Scheme (二分匹配)

    Taxi Cab Scheme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5710   Accepted: 2393 D ...

  9. FEE Development Essentials

    FEE Development Essentials JS Basic function call() and apply() func1.bind(thisObj,arg1...argn) Cust ...

随机推荐

  1. CSS3圆环旋转效果

    html结构: <div class="demo"></div> css结构: .demo{ width:250px; height:250px; bord ...

  2. ThinkPHP5.0中的build.php自动生成所需的目录结构的详细方法

    一.来到根目录下,找到bulid.php文件进行改写. 改写方法:保留常用的目录结构,其余按照需求改吧! 二.复制一份build.php文件到application目录下 此时根目录下的bulid.p ...

  3. WinForm 实现主程序(exe)与其关联类库(*.dll)分开存放

    WinForm 实现主程序(exe)与其关联类库(*.dll)分开存放    开发环境:   Microsoft Windows 7 SP1 Microsoft.NET Framework 4.0 ( ...

  4. html(),val(),text()的区别

    .html(),.text(),.val() 三种方法都是用来读取选定元素的内容: .html()是用来读取元素的HTML内容(包括其Html标签): .text()用来读取元素的纯文本内 容,包括其 ...

  5. 友盟iOS sdk整理

    文档中心 :http://dev.umeng.com 集成文档:http://dev.umeng.com/analytics/ios-doc/integration 报表中心:http://www.u ...

  6. oracle如何启用审计

    通过数据库初始化参数文件中的AUDIT_TRAIL 初始化参数启用和禁用数据库审计. DB  启用数据库审计并引导所有审计记录到数据库的审计跟踪 OS  启用数据库审计并引导所有审计记录到操作系统的审 ...

  7. 登录注册beta版

    注册 login_count = 0 username_inp = input('请输入用户名:') while login_count < 3: pwd_inp = input('请输入密码: ...

  8. Flutter SDK path为空导致工程打开后不显示iOS模拟器的问题

    说明下问题场景,面向git编程时下载了个开源的Flutter项目 Mac系统下AndroidStudio打开工程后,发现顶部不展示iPhone模拟器 根据ide浅黄色提示提示,判断是FlutterSD ...

  9. innerHTML属性的内存和性能问题

    使用innerHTML替换子节点可能会导致浏览器的内存占用问题,尤其是在IE中,问题更加明显.在删除带有时间处理程序或引用了其他js对象子树是,就有可能导致内存占用问题.假设某个元素有一个事件处理程序 ...

  10. 《spring boot》8.2章学习时无法正常启动,报“ORA-00942: 表或视图不存在 ”

    在学习<spring boot>一书的过程中,由于原书作者难免有一些遗漏的的地方,或者系统.软件版本不一致.框架更新等各种因素,完全安装书中源码页不能实现项目的正常启动 在8.2章节,演示 ...