博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[APIO2012]派遣
阅读量:7122 次
发布时间:2019-06-28

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

遍历每个点,维护可并堆。

遍历结束后,将所有儿子的可并堆并起来。并计算答案。

#include 
#include
#include
#include
#include
using std::vector;using std::max;using std::swap;const int maxn=100010;struct Data{ long long sum,val; int ch[2]; int dis=0; int tot; int p,f; void Set(int a=0,int b=0,int c=0,int d=0,int e=0,int g=0) { sum=a;val=b; p=c;f=d; tot=e; dis=g; }};Data H[maxn];vector
V[maxn];long long I[maxn],Cost[maxn],ans;int n,m,root;int Find(int x){ if(H[x].f==x) return x; return H[x].f=Find(H[x].f);}int Merge(int x,int y){ if(!x||!y) return x+y; if(H[x].val
y)) swap(x,y); H[x].ch[1]=Merge(H[x].ch[1],y); H[H[x].ch[1]].f=Find(x); int &Ls=H[x].ch[0],&Rs=H[x].ch[1]; if(H[Ls].dis
m) { int Ls=H[pas].ch[0],Rs=H[pas].ch[1]; H[Ls].f=Ls;H[Rs].f=Rs; H[pas].Set(0,0,0,Merge(Ls,Rs)); pas=Find(pas); } ans=max(ans,I[now]*H[pas].tot); return ;}void dfs(int now){ H[now].Set(Cost[now],Cost[now],now,now,1); for(int i=0;i

转载于:https://www.cnblogs.com/Lance1ot/p/10332308.html

你可能感兴趣的文章
Apache Flink 漫谈系列(08) - SQL概览
查看>>
使用免费OA系统,让你成为职场锦鲤
查看>>
京东测试之道,这些你早该知道!
查看>>
jQuery可放大预览的图片滑块
查看>>
SpringBoot连接Redis哨兵模式
查看>>
【WPF】ComboBoxItem的禁用
查看>>
HTML5_CSS3仿Google Play垂直菜单
查看>>
达观杯文本智能处理挑战赛 练手代码实现
查看>>
Tornado 简单入门教程(一)——Demo1
查看>>
Pgpool-II 最新小版本更新发布,PgSQL 负载均衡中间件
查看>>
数据传输加密方式总结
查看>>
U-Boot启动过程完全分析
查看>>
深入理解Java中的底层阻塞原理及实现
查看>>
shell编程之转义和引用
查看>>
云盾.态势感知情报生态合作发布
查看>>
PHP排序函数
查看>>
ora.proxy_advm
查看>>
GitHub在其网站实现中移除对jQuery的使用
查看>>
美国明尼苏达州大学研制出仿生眼原型
查看>>
这些年,我是如何当好一个技术支持的
查看>>