题目:https://www.luogu.org/problemnew/show/AT2112
对于这种找路径的就直接上点分治就好。
分治时,算出每一个点到分治重心的后能剩多少油,从分治重心走到每个点最少需要多少起始油量。
对这两个数组排序后合并即可。
注意,合并的时候要保证不属于同一棵子树,这个可以利用boruvka时用到的那个技巧来实现。

#include<bits/stdc++.h>
#define N 220000
#define db double
#define ll long long
#define ldb long double
using namespace std;
inline ll read()
{char ch=0;ll x=0,flag=1;while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}return x*flag;
}
const ll inf=1e9;
struct edge{ll to,nxt,w;}e[N*2];
ll num,head[N];
inline void add(ll x,ll y,ll z){e[++num]=(edge){y,head[x],z};head[x]=num;}
bool vis[N];
ll rt,ans,size,cnt1,cnt2,w[N],sz[N],bal[N];
struct node{ll x,w,k;}f[N],g[N];
bool cmp(node a,node b){return a.x<b.x;}
bool operator<(node a,node b){return a.w<b.w;}
void get_rt(ll x,ll fa)
{sz[x]=1;bal[x]=0;for(ll i=head[x];i!=-1;i=e[i].nxt){ll to=e[i].to;if(vis[to]||to==fa)continue;get_rt(to,x);sz[x]+=sz[to];bal[x]=max(bal[x],sz[to]);}bal[x]=max(bal[x],size-sz[x]);if(bal[rt]>bal[x])rt=x;
}
void get_sz(ll x,ll fa)
{sz[x]=1;for(ll i=head[x];i!=-1;i=e[i].nxt){ll to=e[i].to;if(vis[to]||to==fa)continue;get_sz(to,x);sz[x]+=sz[to];}
}
void cal1(ll x,ll k,ll t,ll fa,ll dep,ll flag)
{if(fa==rt)flag=x;if(w[x]>=k)f[++cnt1]=(node){t+w[x],dep,flag};for(ll i=head[x];i!=-1;i=e[i].nxt){ll to=e[i].to,v=e[i].w;if(vis[to]||to==fa)continue;cal1(to,max(v,k+v-w[x]),t-v+w[x],x,dep+1,flag);}
}
void cal2(ll x,ll k,ll t,ll fa,ll dep,ll flag)
{if(fa==rt)flag=x;g[++cnt2]=(node){k,dep,flag};for(ll i=head[x];i!=-1;i=e[i].nxt){ll to=e[i].to,v=e[i].w;if(vis[to]||to==fa)continue;cal2(to,max(k,v-t),t-v+w[to],x,dep+1,flag);}
}
void solve(ll x)
{bal[rt=0]=inf;get_rt(x,x);get_sz(rt,rt);vis[rt]=true;cnt1=0;cal1(rt,0,0,rt,1,rt);sort(f+1,f+cnt1+1,cmp);cnt2=0;cal2(rt,0,0,rt,0,rt);sort(g+1,g+cnt2+1,cmp);node a={0,-inf,0},b={0,-inf,0};for(ll i=1,j=0;i<=cnt1;i++){while(j!=cnt2&&g[j+1].x<=f[i].x){j++;if(g[j].k==a.k)a=max(a,g[j]);else{b=max(b,g[j]);if(a<b)swap(a,b);}}if(f[i].k!=a.k)ans=max(ans,f[i].w+a.w);else ans=max(ans,f[i].w+b.w);}for(ll i=head[rt];i!=-1;i=e[i].nxt){ll to=e[i].to;if(vis[to])continue;size=sz[to];solve(to);}
}
int main()
{ll n=read();for(ll i=1;i<=n;i++)w[i]=read();num=-1;memset(head,-1,sizeof(head));for(ll i=1;i<n;i++){ll x=read(),y=read(),z=read();add(x,y,z);add(y,x,z);}ans=1;size=n;solve(1);printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/Creed-qwq/p/10526181.html

AT2112 Non-redundant Drive相关推荐

  1. 什么是raid 容错式磁盘阵列?

    利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的为提升性能或资料冗余,或是两者同时提升. RAID (/reɪd/; "Redundant Array of Inexpe ...

  2. 惠普服务器ssa找不到控制卡,DL380 Gen10服务器Vmware ESXi 6.0 系统SSACLI工具

    DL380 Gen10服务器Vmware ESXi 6.0 系统SSACLI工具 此实验文档介绍VMware系统下配置阵列.删除阵列.扩容等方法. 1.查看阵列状态 使用命令esxcli ssacli ...

  3. dropbox免费容量_2020年免费云存储指南:Google Drive VS Dropbox VS iCloud VS OneDrive VS Amazon

    dropbox免费容量 Cloud storage allows you to store your data on someone else's hard-drive, in data-center ...

  4. NVIDIA DRIVE AGX开发工具包

    NVIDIA DRIVE AGX开发工具包 英伟达DRIVE™ AGX开发工具包提供了开发生产级自主车辆(AV)所需的硬件.软件和示例应用程序.NVIDIA DRIVE AGX系统建立在汽车产品级芯片 ...

  5. 吴恩达Drive.ai因经营困难“卖身”苹果

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 作者 | Juli Clover等 编译 | 夕颜 来源 | AI科技大本营(ID:rgznai100 ...

  6. AI一分钟 | 英伟达发布最强核弹—无人车AI芯片DRIVE Xavier;百度硅谷首次开放无人车试乘:上车前要先签免责书

    一分钟AI 2018 年国家自然科学基金申请代码出炉,新增人工智能与交叉学科两大领域. 欧洲的无人驾驶汽车软件公司AImotive完成第三轮3800万美元融资,将用于扩大AImotive在全球范围内的 ...

  7. AI Drive 直播 | Objects365物体检测及CrowdHuman人体检测挑战赛线上颁奖

    目标检测是计算机视觉和模式识别领域重要的基础性问题,具有重要的应用价值,近年来在无人驾驶.人脸识别.人工智能等飞速发展的产业中,得到了广泛的应用,目标检测的技术发展因此也面临了更多的挑战. 由此,北京 ...

  8. [图]吴恩达AI公司Drive.ai或已找到新买家--苹果

    https://www.cnbeta.com/articles/tech/854603.htm 图片来自于 Drive.ai 知情人士透露,苹果本次交易的类型为"人才收购"(acq ...

  9. Drive.ai轰然倒下:曾估值两亿,吴恩达夫妇站台,苹果将接盘部分可用技术人才...

    来源:大数据文摘 曾经估值两个亿美元,吴恩达夫妇亲自站台,风极一时的无人车创业公司Drive.ai轰然倒塌. 本月20日,总部位于加州山景城的 Drive.ai 公司被证实已经向一家州政府机构递交了通 ...

最新文章

  1. Lync 2010迁移Lync 2013 PART6:迁移CMS
  2. 全球及中国婚礼鲜花行业运营模式分析及投资战略评估报告2022-2027年版
  3. chrome源代码目录结构简介
  4. 京东开普勒php接口,IOS菜鸟初学第十五篇:接入京东开普勒sdk,呼起京东app打开任意京东的链接-Go语言中文社区...
  5. 美团和支付宝大战在所难免
  6. telnet服务器响应慢,交换机s10508 telnet登录后上反应慢
  7. matlab状态方程 传递函数 可控性,matlab 控制系统仿真
  8. PS中的Workflow的创建
  9. linux移动文件 rf参数_linux下文件的复制、移动与删除
  10. js中邦定事件与解绑支持匿名函数
  11. Rust : 闭包、move、复制与移动语义
  12. xmind快捷键_小冰笔记 | 请在XMIND里写下你的MIND!
  13. 双系统重装Ubuntu经验分享
  14. RationalDMIS 7.1 手动测量特征注意事项
  15. php openldap支持ssl,基于OpenLDAP服务端和客户端的SSL/TLS的配置方法
  16. HTTP status Code 412 未满足前提条件的解决方法之一
  17. 周伯通的空明拳,米诺斯的星尘傀儡线,SAP Kyma的Serverless
  18. erLang中的标点符号
  19. 互联网晚报 | 12月20日 星期一 | 安踏100亿成立“和敏基金会”;阿里公布碳中和目标;京东上线数字藏品交易平台...
  20. 如何完成中文翻译日文在线翻译

热门文章

  1. PLSQL DEVELOPER编辑器的自动替换文件
  2. block,inline和inline-block
  3. hibernate+spring 注解 对事务的一些信息 (还没有整理)
  4. [导入]Nhibernate学习 资料
  5. ★LeetCode(175)——组合两个表(MySQL)
  6. 今天来谈谈面试官最喜欢问JS中的闭包问题吧
  7. 输入这个命令之后,FinalShell连接不上地推主机了
  8. 3个月定期存款利息怎么算?
  9. 摄影专业学生,没有摄影棚,怎么练摄影?
  10. 冬天你的车热的正确吗?如何正确热车?