博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3641 : 货车运输
阅读量:6976 次
发布时间:2019-06-27

本文共 2041 字,大约阅读时间需要 6 分钟。

若一条边的v小于等于u,则贡献为l*w/v,否则贡献为l*w/u

将边按v从小到大排序,将询问按u从小到大排序

用树链剖分维护链上和,val[0]表示第一种情况下的贡献,val[1]表示第二种情况下的贡献

一开始val[0]都是0,val[1]=l*w,

然后每到一个询问(s,t,u),就把所有v小于等于u的边修改掉,val[0]改为l*w/v,val[1]改为0

因为是环套外向树,所以把额外的边(exa,exb,exl,exv)拿走后变成了一棵树。

查询时在下面三种情况中取min:

1.(s,t)链上val[0]的和+(s,t)链上val[1]的和/u

2.(s,exa)链上val[0]的和+(t,exb)链上val[0]的和+((s,exa)链上val[1]的和+(t,exb)链上val[1]的和)/u+exl*exw/min(u,exv)

3.(s,exb)链上val[0]的和+(t,exa)链上val[0]的和+((s,exb)链上val[1]的和+(t,exa)链上val[1]的和)/u+exl*exw/min(u,exv)

时间复杂度$O(n\log n)$

 

#include
#include
#define N 100010using namespace std;inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}struct edge{int l,x,v,w,id;}E[N];struct que{int s,t,u,id;}Q[N];int n,m,q,i,x,y,z,t,exa,exb,exl,exx,exv,exw,cnt,now,V[N],W[N],g[N<<1],nxt[N<<2],v[N<<2],ed,size[N<<1],d[N<<1],f[N<<1],son[N<<1],loc[N<<1],top[N<<1],dfn;double ans[N],val[2][N<<3];inline bool cmpe(edge a,edge b){return a.v
sizemax)sizemax=size[v[i]],heavy=v[i]; } if(heavy)son[x]=heavy;}void dfs2(int x,int pre,int t){ loc[x]=++dfn;top[x]=t; if(son[x])dfs2(son[x],x,t); for(int i=g[x];i;i=nxt[i])if(v[i]!=pre&&v[i]!=son[x])dfs2(v[i],x,v[i]);}void change(int p,int x,int a,int b,int c,double d){ if(a==b){val[p][x]=d;return;} int mid=(a+b)>>1; if(c<=mid)change(p,x<<1,a,mid,c,d);else change(p,x<<1|1,mid+1,b,c,d); val[p][x]=val[p][x<<1]+val[p][x<<1|1];}double ask(int p,int x,int a,int b,int c,int d){ if(c<=a&&b<=d)return val[p][x]; int mid=(a+b)>>1;double t=0; if(c<=mid)t=ask(p,x<<1,a,mid,c,d); if(d>mid)t+=ask(p,x<<1|1,mid+1,b,c,d); return t;}inline double query(int p,int x,int y){ double t=0; while(top[x]!=top[y]){ if(d[top[x]]
d[y])swap(x,y); return t+ask(p,1,1,dfn,loc[x],loc[y]);}inline double getans(int x,int y,int u){ double t=query(0,x,y)+query(1,x,y)/(double)u,tmp; tmp=query(0,x,exa)+query(0,y,exb)+(query(1,x,exa)+query(1,y,exb))/(double)u+(double)exl*(double)exw/(double)(exv

  

 

转载地址:http://ebesl.baihongyu.com/

你可能感兴趣的文章
学习的方法
查看>>
Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结
查看>>
手机SD卡损坏补救措施
查看>>
ORACLE数据库不同故障下的恢复总结
查看>>
使用eclipse转换普通项目为web项目
查看>>
MVC入门教程-视图中的Layout使用
查看>>
2015年第4本(英文第3本):Godfather教父
查看>>
Python Select 解析
查看>>
ASP.NET 5中的ASP.NET Bundles跑到哪里去了?
查看>>
FastDFS概要
查看>>
LNMP的的编译安装全过程
查看>>
Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)...
查看>>
面试经验谈(经典)
查看>>
微型oracle学习使用—oracle XE(oracle express edition
查看>>
perl 从文件里读出变量无法使用解决办法
查看>>
Eclipse中修改Web项目的URL访问路径
查看>>
跟我学STL系列(1)——STL入门介绍
查看>>
程序员2009精华本(china-pub首发)--百期后的新起点
查看>>
毕业生的商业软件开发之路--C#数据类型
查看>>
云计算解码:技术架构和产业运营
查看>>