题目链接

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

题解

树高不会很高<=20

点亮灯泡x,点亮x的一个子树,再点亮x另外的子树,

然后回到x的父节点,点亮父节点之后再点亮父节点的其他子树

所以对于一个节点x,有这样两种情况

x还没有被点亮,那么下一个被点亮的是x的一个儿子

x是叶子节点,那么下一个被点亮的是它的祖先,或者是它祖先的儿子

设f[i][j]表示点亮i之后回到i的第j个祖先的最小花费

设g[i][j]表示点亮i之后回到i的第j个祖先的另一个儿子的最小花费

然后从下到上,由儿子的状态转移到父亲的状态

讨论一下儿子个数

最后模拟点亮过程统计答案

ans要开大

代码

#include<cstdio>
#include<algorithm>
using namespace std;
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9')c = getchar();
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f ;
}
#define INF 2000000000000000000ll
#define LL long long
#define fa(i,j) ((1 << j - 1) <= i ? (i >> j) : -1 )
#define bro(i,j) ((i >> j - 1) ^ 1)
#define ls (i << 1)
#define rs (i << 1 | 1)
const int maxn = 200007; int n;
LL a[maxn],dp[maxn][27][2],dis[maxn][27]; int main() {
n = read();
for(int i = 1;i <= n;++ i) a[i] = read();
dis[1][1] = 0;
for(int i = 2;i <= n;++ i) {
dis[i][1] = read();
for(int j = 2;~fa(i,j);++ j) dis[i][j] = dis[fa(i,1)][j - 1] + dis[i][1];
}
for(int i = n;i >= 1;-- i) { for(int j = 1;~ fa(i,j);++ j) {
dp[i][j][0] = dp[i][j][1] = INF;
if(ls > n)
dp[i][j][0] = dis[i][j] * a[fa(i,j)], dp[i][j][1] = (dis[i][j] + dis[bro(i,j)][1]) * a[bro(i,j)];
else if(rs > n)
dp[i][j][0] = dp[ls][j + 1][0] + dis[ls][1] * a[ls], dp[i][j][1] = dp[ls][j + 1][1] + dis[ls][1] * a[ls];
else
dp[i][j][0] = min(dp[i][j][0],dp[ls][1][1] + dp[rs][j + 1][0] + dis[ls][1] * a[ls]),
dp[i][j][0] = min(dp[i][j][0],dp[rs][1][1] + dp[ls][j + 1][0] + dis[rs][1] * a[rs]),
dp[i][j][1] = min(dp[i][j][1],dp[ls][1][1] + dp[rs][j + 1][1] + dis[ls][1] * a[ls]),
dp[i][j][1] = min(dp[i][j][1],dp[rs][1][1] + dp[ls][j + 1][1] + dis[rs][1] * a[rs]);
}
}
LL ans = INF;
for(int x = 1;x <= n;x ++) {
LL tmp = dp[x][1][0];
for(int i = fa(x,1),last = x;~i;i = fa(i,1),last = fa(last,1)) {
if(bro(last,1) <= n) tmp += dis[bro(last,1)][1] * a[bro(last,1)] + dp[bro(last,1)][2][0];
else tmp += dis[i][1] * a[fa(i,1)];
}
ans = min(ans,tmp);
}
printf("%lld\n",ans);
return 0;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Linux 开启端口命令

    编者按 今天在配置Zookeeper集群的时候,碰到下面的问题: 这里说明是主机192.168.116.129:3888没有连通. 首先ping了一把,是通的,说明主机之间是连通的,然后再检查开放的端 ...

  2. NOIP常见模板集合

    Preface 这篇博客记录的是我联赛前虽然只有两天了的打板子记录. 只求真的能给我起到些作用吧,一般按照难度排序. 而且从这篇博客开始我会用H3的标题代替H4 为了节约篇幅,以下的代码一般均以cla ...

  3. C# 爬虫 正则、NSoup、HtmlAgilityPack、Jumony四种方式抓取小说

    心血来潮,想爬点小说.通过百度选择了个小说网站,随便找了一本小说http://www.23us.so/files/article/html/13/13655/index.html. 1.分析html规 ...

  4. SNMP基础知识

    注:本篇博客并非原创,仅是学习笔记 1. 概述1.1 诞生背景1.2 SNMP简介1.3 版本1.4 术语1.5 网络结构1.6 MIB简介2. Linux的SNMP安装 1. 概述 1.1 诞生背景 ...

  5. BugkuCTF web基础$_POST

    前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文章的形式发表,感谢大家一直以来的支持和理 ...

  6. nginx下目录浏览及其验证功能、版本隐藏等配置记录

    工作中常常有写不能有网页下载东西的需求,在Apache下搭建完成后直接导入文件即可达到下载/显示文件的效果;而Nginx的目录列表功能默认是关闭的,如果需要打开Nginx的目录列表功能,需要手动配置, ...

  7. Docker容器学习梳理 - 容器时间跟宿主机时间同步

    在Docker容器创建好之后,可能会发现容器时间跟宿主机时间不一致,这就需要同步它们的时间,让容器时间跟宿主机时间保持一致.如下: 宿主机时间 [root@slave-1 ~]# date Fri M ...

  8. Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)-D- Array Restoration

    我们知道不满足的肯定是两边大中间小的,这样就用RMQ查询两个相同等值的区间内部最小值即可,注意边界条件 #include<bits/stdc++.h> #define x first #d ...

  9. 作业20171130 final发布 成绩

    申诉 对成绩有疑问或不同意见的同学,请在群里[@杨贵福]. 申诉时间截止2017年12月16日 17:00. 更新 第一周和第二周成绩分别应占比20%和10%,计算时刚好反了.所以同学们的最终成绩有变 ...

  10. beta阶段测试基本概况对应机型硬件信息

    机型测试概况 测试结果 测试终端数 品牌分布分析 系统分布分析 分辨率分布 未执行 1 联想 4.0.3 480*800 安装失败 1 联想 4.2.1 480*854 通过 119 华为, 三星, ...