当前位置: 首页 > news >正文

题解:P5306 [COCI 2018/2019 #5] Transport

点分治的一道好题。

首先要把题目的油量限制转化成下面的形式。

考虑一条 \(u\)\(v\) 的路径(注意是有向的),把这条路径抽出来,对点权、边权编一下号:

那么题目要让我们满足的是对于 \(\forall 1\le i<n\),都有 \(Sa_i-Sw_i\ge 0\),其中 \(Sa_i,Sb_i\) 分别表示点权、边权的前缀和。

点分治完后,只需要考虑跨顶点的路径,这样一条路径有两段,一段是端点 \(u\) 向上到根节点 \(rt\),另一段是从根 \(rt\) 向下到端点 \(v\),那么先分开来看。

先看向下走的吧,如果直接判 \(rt\)\(v\) 的路径合法性是不对的,因为有可能向上走的路径到了 \(rt\) 多出了一些油量 \(last\),他可以贡献给向下的路径。

那我们需要找到这条路径上的极值,也就是 \(minn=\min Sa_i-Sw_i\)。不难想到,如果剩余的油量加上这个最小值都大于等于 \(0\) 了,说明对于任何一个前缀和之差都满足大于等于 \(0\) 了,这条路径就是合法的。

所以对于向下的路径,保留所有路径,并顺着记录这个最小值。

再来看向上的路径,向上的路径不用管我们之前说的剩余问题了,所以我们只用判断它合不合法,以及剩余油量。

剩余油量很好求出,但是由于路径是从底下往上走到根的,所以我们要维护出到根的前缀的一些信息,来方便我们进行判断。

考虑已经求出了 \(i\) 号节点的信息,现在遍历到了 \(u\),那么会有以下几种情况。

  1. \(a_u-w_u<0\),说明 \(u\) 往上走一下到 \(i\) 就不合法。
  2. 否则 \(a_u-w_u\ge 0\),此时这个值相当于剩余油量会贡献到之上的路径判断中,所以我们同样要维护一个最小值。

具体的,最小值的维护形如这样,\(minn_u=\min(minn_i,0)+a_u-w_u\),什么意思呢,如果 \(minn_i\)\(i\) 之上的最小值都大于 \(0\),那么最小值一定产生在 \(u\)\(i\) 这条边上,否则就在之前的最小值上,然后 \(a_u-w_u\) 相当于一个剩余油量,会贡献给每一个 \(u\)\(rt\) 的边,所以最小值是加上这个东西。

如果 \(minn_u\ge 0\) 说明 \(u\)\(rt\) 的路径合法,记录一下剩余油量 \(last\)(注意并不等于 \(minn\)),最后就是找向上的剩余油量 \(last\),以及向下的限制 \(minn\)\(last+minn\ge 0\) 的对数。

特殊的,是以 \(rt\) 作为起点、终点的路径,特殊处理下,以及在同一个根节点儿子的子树内的,容斥掉就行了。

#include<bits/stdc++.h> 
using namespace std;
typedef long long ll;
const int N=1e5+5;
typedef long long ll;
int n,tot=1,head[N];
struct edge{int to,next;ll dis;
}e[N<<1];
void add(int from,int to,ll dis){e[++tot]={to,head[from],dis};head[from]=tot;
}
bool vis[N];
int f,g,F,G,siz[N];
ll ans,a[N],down[N],up[N],Down[N],Up[N];
void getsize(int u,int fa){siz[u]=1;for(int i=head[u];i;i=e[i].next){int v=e[i].to;if(v!=fa&&!vis[v]){getsize(v,u);siz[u]+=siz[v];}}
}
int getroot(int u,int fa){getsize(u,fa);int half=siz[u]>>1;bool flag=false;while(!flag){flag=true;for(int i=head[u];i;i=e[i].next){int v=e[i].to;if(v!=fa&&!vis[v]&&siz[v]>half){fa=u,u=v,flag=false;break;}}}return u;
}
void dfs1(int u,int fa,ll sa,ll sw,ll minn){ //往下走 rt->vdown[++f]=minn;for(int i=head[u];i;i=e[i].next){int v=e[i].to;if(v!=fa&&!vis[v]){dfs1(v,u,sa+a[u],sw+e[i].dis,min(minn,(sa+a[u])-(sw+e[i].dis)));}}
}
void dfs2(int u,int fa,ll sa,ll sw,ll minn){ //往上走 v->son(rt)if(minn>=0){up[++g]=sa-sw;}for(int i=head[u];i;i=e[i].next){int v=e[i].to;if(v!=fa&&!vis[v]){dfs2(v,u,sa+a[v],sw+e[i].dis,min(minn,0ll)+a[v]-e[i].dis);}}
}
void calc(int u){for(int i=head[u];i;i=e[i].next){int v=e[i].to;if(!vis[v]){  dfs1(v,u,a[u],e[i].dis,a[u]-e[i].dis); //求down dfs2(v,u,a[v],e[i].dis,a[v]-e[i].dis); //求up sort(down+1,down+f+1);	for(int j=1;j<=g;j++){ int id=lower_bound(down+1,down+f+1,-up[j])-down;ans-=(f-id+1); //先容斥掉 } for(int j=1;j<=f;j++){Down[++F]=down[j];if(down[j]>=0) ans++; //rt->v}f=0;for(int j=1;j<=g;j++){Up[++G]=up[j];ans++; //v->rt}g=0;}}sort(Down+1,Down+F+1);	for(int j=1;j<=G;j++){int id=lower_bound(Down+1,Down+F+1,-Up[j])-Down;ans+=(F-id+1); //跨过顶点 } F=G=0;
}
void solve(int u){vis[u]=1;calc(u);for(int i=head[u];i;i=e[i].next){int v=e[i].to;if(!vis[v]) solve(getroot(v,u));}
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1,x,y,z;i<n;i++){cin>>x>>y>>z;add(x,y,z),add(y,x,z);}solve(getroot(1,0));cout<<ans;return 0;
} 
http://www.jsqmd.com/news/795182/

相关文章:

  • 欢客互动赋能泛家居全链路,让获客成交更简单的数智生态平台 - 速递信息
  • 广州白蚁防治公司哪家好?——广州市白蚁防治中心/越秀区/天河区/荔湾区/海珠区/白云区/番禺区 - 品牌推荐大师
  • Steam创意工坊终极下载指南:WorkshopDL让你免费获取1000+游戏模组
  • 丽水金价高悬,福正美变现为何成最优解? - 福正美黄金回收
  • 哈尔滨家政保姆行业解析:靠谱服务的核心判定标准 - 奔跑123
  • Linux Deadline 调度器的 put_prev_task:前一个 Deadline 任务处理
  • 终极Zotero Style插件:三步打造你的智能文献管理神器
  • [理论篇-14]大模型评估与可观测性——如何知道你的 AI 到底行不行
  • AI写专著解决方案:AI专著写作工具,高效产出20万字专业专著!
  • 添加公众号附件链接的工具软件(政企云文档小程序)终身免费使用. - 政企云文档
  • Excel智能革命:用自然语言对话实现数据处理自动化
  • 太原高端水漆定制认准客来福 十年三千户业主口碑之选 - 速递信息
  • NI PXI-5922数字化仪:高精度动态信号采集技术解析
  • 2026企业级CRM综合实力榜单:5大标杆产品驱动行业数字化升级 - Blue_dou
  • 深岩银河存档编辑器终极指南:快速掌握DRG游戏存档修改技巧 [特殊字符]
  • 模拟文件打开写入关闭的过程
  • 2026年中山GEO优化服务商推荐:五家实力机构综合选型分析参考 - 产业观察网
  • 银泰百货卡回收技巧分享:常见回收问题解答! - 团团收购物卡回收
  • 免费LLM API集成实战:从选型到构建高可用AI服务
  • 华为光猫配置解密工具终极技术指南:深度解析AES加密与XML/CFG文件处理
  • 2026年中山五金配件定制厂家怎么选?工程装修采购避坑指南与靠谱供应商对标 - 优质企业观察收录
  • 百度网盘秒传技术终极指南:打破文件分享的时间限制
  • 如何高效使用Equalizer APO:从音频优化到专业级声学校准的完整指南
  • 打造你的专属桌面伙伴:DyberPet开源桌面宠物框架完全指南
  • 终极指南:3分钟实现GitHub下载速度50倍提升
  • Fast-GitHub:GitHub访问加速的技术解决方案与实现原理
  • 终极音频解密指南:3分钟解锁QQ音乐加密格式
  • 2026年广州白蚁防治公司哪家好?越秀区/天河区/荔湾区/海珠区/白云区/番禺区各区专业上门灭白蚁推荐 - 品牌推荐大师
  • 大语言模型评估指南:从ChatGPT评测看LLM能力边界与挑战
  • OpenAI 工程师翁家翌实验:AI 可“自主改代码”变强,Heuristic Learning 产业应用前景几何?