#2009. 「SCOI2015」小凸玩密室

内存限制:256 MiB时间限制:1000 ms标准输入输出
题目类型:传统评测方式:文本比较
上传者: 匿名

题目描述

小凸和小方相约玩密室逃脱,这个密室是一棵有 n nn 个节点的完全二叉树,每个节点有一个灯泡。点亮所有灯泡即可逃出密室。每个灯泡有个权值 Ai A_iA​i​​,每条边也有个权值 bi b_ib​i​​。

点亮第 1 11 个灯泡不需要花费,之后每点亮一个新的灯泡 V VV 的花费,等于上一个被点亮的灯泡 U UU 到这个点 V VV 的距离 D(u,v) D(u, v)D(u,v),乘以这个点的权值 Av A_vA​v​​。

在点灯的过程中,要保证任意时刻所有被点亮的灯泡必须连通,在点亮一个灯泡后必须先点亮其子树所有灯泡才能点亮其他灯泡。请告诉他们,逃出密室的最少花费是多少。

输入格式

第一行包含一个数 n nn,代表节点的个数。
第二行包含 n nn 个数,代表每个节点的权值 ai a_ia​i​​。
第三行包含 n−1 n - 1n−1 个数,代表每条边的权值 bi b_ib​i​​,第 i ii 号边是由第 i+12 \frac{i + 1}{2}​2​​i+1​​ 号点连向第 i+1 i + 1i+1 号点的边。

输出格式

输出包含一个数,代表最少的花费。

样例

样例输入

3
5 1 2
2 1

样例输出

5

数据范围与提示

1≤N≤2×105,1<Ai,Bi≤105 1 \leq N \leq 2 \times 10 ^ 5, 1 < A_i, B_i \leq 10 ^ 51≤N≤2×10​5​​,1<A​i​​,B​i​​≤10​5​​

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=,M=;
typedef long long LL;
int n;
LL a[N],b[N],dep[N],dis[N];
LL f[N][M],g[N][M],ans;
char c;
int read()
{
for (c=getchar();c<'' || c>'';c=getchar());
int x=c-;
for (c=getchar();c>='' && c<='';c=getchar()) x=x*+c-;
return x;
}
int main(){
n=read();
for (int i=;i<=n;i++) a[i]=read();
dep[]=;
for (int i=;i<=n;i++){
b[i]=read();
dep[i]=dep[i>>]+; dis[i]=dis[i>>]+b[i];
}
for (int i=n;i;i--){
for (int j=;j<dep[i];j++){
int lca=(i>>(dep[i]-j)),x=(i>>(dep[i]-j-))^,lt=i<<;
if (lt>n) f[i][j]=(LL)a[x]*(dis[i]+dis[x]-dis[lca]*);
else if (lt==n) f[i][j]=(LL)a[lt]*b[lt]+f[lt][j];
else f[i][j]=min((LL)a[lt]*b[lt]+f[lt][dep[i]]+f[lt|][j],(LL)a[lt|]*b[lt|]+f[lt|][dep[i]]+f[lt][j]);
}
}
for (int i=n;i;i--){
for (int j=;j<dep[i];j++){
int x=i>>(dep[i]-j),lt=i<<;
if (lt>n) g[i][j]=(LL)a[x]*(dis[i]-dis[x]);
else if (lt==n) g[i][j]=(LL)a[lt]*b[lt]+g[lt][j];
else g[i][j]=min((LL)a[lt]*b[lt]+f[lt][dep[i]]+g[lt|][j],(LL)a[lt|]*b[lt|]+f[lt|][dep[i]]+g[lt][j]);
}
}
ans=g[][];
for (int i=;i<=n;i++){
LL s=g[i][dep[i]-];
for (int j=i;j>;j>>=){
int x=j^,y=j>>; if (x>n) s+=(LL)a[y>>]*b[y];
else s+=(LL)a[x]*b[x]+g[x][dep[y]-];
}
if (s<ans) ans=s;
}
printf("%lld\n",ans);
return ;
}

—Libre#2009. 「SCOI2015」小凸玩密室的更多相关文章

  1. loj#2009.「SCOI2015」小凸玩密室

    题目链接 loj#2009. 「SCOI2015」小凸玩密室 题解 树高不会很高<=20 点亮灯泡x,点亮x的一个子树,再点亮x另外的子树, 然后回到x的父节点,点亮父节点之后再点亮父节点的其他 ...

  2. #2009. 「SCOI2015」小凸玩密室

    神仙题啊.完全想不出 首先看方案.可以从任意一个点开始,在这个点要先走完子树,然后走到父亲,再走兄弟,再走父亲的父亲,父亲的兄弟..一直走到1,1的另外一个子树,结束. 完全不会鸭.jpg 设f[i] ...

  3. 【LOJ】 #2009. 「SCOI2015」小凸玩密室

    题解 神仙dp啊QAQ 我们发现我们需要枚举一个起点,遍历完它所有的儿子然后向上爬 设\(f[i][j]\)表示第i个点的子树全部处理完之后到达i深度为j的祖先的兄弟处 我们只需要对叶子节点和只有一个 ...

  4. 「SCOI2015」小凸玩密室 解题报告

    「SCOI2015」小凸玩密室 虽然有心里在想一些奇奇怪怪的事情的原因,不过还是写太久了.. 不过这个题本身也挺厉害的 注意第一个被点亮的是任意选的,我最开始压根没注意到 \(dp_{i,j}\)代表 ...

  5. loj2009. 「SCOI2015」小凸玩密室

    「SCOI2015」小凸玩密室 小凸和小方相约玩密室逃脱,这个密室是一棵有 $ n $ 个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯泡即可逃出密室.每个灯泡有个权值 $ A_i $,每条边也有个 ...

  6. 「SCOI2015」小凸玩矩阵 解题报告

    「SCOI2015」小凸玩矩阵 我好沙茶啊 把点当边连接行和列,在外面二分答案跑图的匹配就行了 我最开始二分方向搞反了,样例没过. 脑袋一抽,这绝壁要费用流,连忙打了个KM 然后wa了,一想这个不是完 ...

  7. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  8. AC日记——「SCOI2015」小凸玩矩阵 LiBreOJ 2006

    「SCOI2015」小凸玩矩阵 思路: 二分+最大流: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 300 ...

  9. loj #2006. 「SCOI2015」小凸玩矩阵

    #2006. 「SCOI2015」小凸玩矩阵   题目描述 小凸和小方是好朋友,小方给小凸一个 N×M N \times MN×M(N≤M N \leq MN≤M)的矩阵 A AA,要求小凸从其中选出 ...

随机推荐

  1. Oracle数据库之SQL基础和分支循环

    一.SQL基础语言 DECLARE --声明 a ); --变量或对象 BEGIN a:='小明';-- := 表示给一个变量赋值 dbms_output.put_line(a); --输出用 dbm ...

  2. Oracle数据库基础--存储过程和函数

    一.存储过程和函数 存储过程: 对一个模块的封装 函数: 功能与存储过程几乎一样 区别: 函数必须通过return 关键字返回一个值 存储过程: 不需要return返回值 参数: 输入型参数 输出型参 ...

  3. 各种 Spring-Boot-Starters系列 介绍

     分类: JavaWeb后端(6)      目录(?)[+]   原文传送门:Spring Boot application starters ↑传送门里有各Spring-Boot-Starters ...

  4. JS中继承方式总结

    说在前面:为了使代码更为简洁方便理解, 本文中的代码均将"非核心实现"部分的代码移出. 一.原型链方式关于原型链,可点击<深入浅出,JS原型链的工作原理>,本文不再重复 ...

  5. MVC+Ext.net零基础学习记录(五)

    继MVC+Ext.net零基础学习记录(四),在后面我在既有的项目上又添加了一个子项目,还用前面提到的方法,进行主项目中引用DLL,然后子项目中生成事件中使用mkdir 进行拷贝 发现一个下午就总是报 ...

  6. 五子棋AI的思路

    隔了一年才把AI思路给写了... 需求分析与设计方案:http://www.cnblogs.com/songdechiu/p/4951634.html 如需整个工程,移步http://download ...

  7. mooc_java 集合框架下

    1.判断List中课程是否存在 /** * 测试List的contains方法 * @param args */ public void testListContains(){ Course cour ...

  8. 【bzoj1232】[Usaco2008Nov]安慰奶牛cheer

    问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路, ...

  9. nginx 反向代理配置

    转载一篇特别好的nginx配置博文:http://www.cnblogs.com/hunttown/p/5759959.html

  10. BZOJ1758:[WC2010]重建计划

    浅谈树分治:https://www.cnblogs.com/AKMer/p/10014803.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem. ...