「SCOI2015」小凸玩密室 解题报告
「SCOI2015」小凸玩密室
虽然有心里在想一些奇奇怪怪的事情的原因,不过还是写太久了..
不过这个题本身也挺厉害的
注意第一个被点亮的是任意选的,我最开始压根没注意到
\(dp_{i,j}\)代表\(i\)号点子树最后连出去的一个点连的是它第\(j\)层的祖先
\(f_{i,j}\)代表\(i\)号点子树最后连出去的一个点连的是它第\(j\)层祖先的另一个儿子
然后我们就可以拼子树,做换根了
要讨论只有一个儿子的情况
Code:
#include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
#define ll long long
const int N=2e5+10;
using std::min;
template <class T>
void read(T &x)
{
x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
}
ll dp[2][N][20],a[N],edge[N],ans=1e18;
int n,Log[N];
#define ls (id<<1)
#define rs (id<<1|1)
void dfs(int id)
{
if(id<<1>n) return;
dfs(ls),dfs(rs);
for(int dep=Log[id];~dep;dep--)
{
if(ls<=n&&rs<=n)
{
dp[0][id][dep]=min(a[ls]*edge[ls]+dp[1][ls][Log[id]]+dp[0][rs][dep]
,a[rs]*edge[rs]+dp[1][rs][Log[id]]+dp[0][ls][dep]);
dp[1][id][dep]=min(a[ls]*edge[ls]+dp[1][ls][Log[id]]+dp[1][rs][dep]
,a[rs]*edge[rs]+dp[1][rs][Log[id]]+dp[1][ls][dep]);
}
else if(ls<=n)
{
dp[0][id][dep]=a[ls]*edge[ls]+dp[0][ls][dep];
dp[1][id][dep]=a[ls]*edge[ls]+dp[1][ls][dep];
}
}
}
void dfs0(int id,ll cost)
{
ans=min(ans,dp[0][id][Log[id]-1]+cost);
if(ls<=n&&rs<=n)
{
dfs0(ls,a[rs]*edge[rs]+dp[0][rs][Log[id]-1]+cost);
dfs0(rs,a[ls]*edge[ls]+dp[0][ls][Log[id]-1]+cost);
}
else if(ls<=n)
dfs0(ls,edge[id]*a[id>>1]+cost);
}
int main()
{
int flag=0;read(n);
for(int i=1;i<=n;i++) read(a[i]),Log[i]=Log[i>>1]+1;
for(int i=2;i<=n;i++) read(edge[i]);
memset(dp,0x3f,sizeof dp);
for(int i=1;i<=n;i++)
if(i<<1>n)
{
int typ=!(i&1),id=i>>1;ll sum=edge[i];
for(int j=Log[i]-1;~j;j--)
{
dp[0][i][j]=a[id]*sum;
dp[1][i][j]=a[id<<1|typ]*(sum+edge[id<<1|typ]);
sum+=edge[id];
typ=!(id&1);
id>>=1;
}
}
dfs(1);
dfs0(1,0);
printf("%lld\n",ans);
return 0;
}
2019.2.27
「SCOI2015」小凸玩密室 解题报告的更多相关文章
- 「SCOI2015」小凸玩矩阵 解题报告
「SCOI2015」小凸玩矩阵 我好沙茶啊 把点当边连接行和列,在外面二分答案跑图的匹配就行了 我最开始二分方向搞反了,样例没过. 脑袋一抽,这绝壁要费用流,连忙打了个KM 然后wa了,一想这个不是完 ...
- loj#2009.「SCOI2015」小凸玩密室
题目链接 loj#2009. 「SCOI2015」小凸玩密室 题解 树高不会很高<=20 点亮灯泡x,点亮x的一个子树,再点亮x另外的子树, 然后回到x的父节点,点亮父节点之后再点亮父节点的其他 ...
- —Libre#2009. 「SCOI2015」小凸玩密室
#2009. 「SCOI2015」小凸玩密室 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- loj2009. 「SCOI2015」小凸玩密室
「SCOI2015」小凸玩密室 小凸和小方相约玩密室逃脱,这个密室是一棵有 $ n $ 个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯泡即可逃出密室.每个灯泡有个权值 $ A_i $,每条边也有个 ...
- 「SCOI2015」小凸想跑步 解题报告
「SCOI2015」小凸想跑步 最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质 实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了 Code: #include & ...
- 「SCOI2015」小凸解密码 解题报告
「SCOI2015」小凸解密码 题意:给一个环,定义一段连续的极长\(0\)串为\(0\)区间,定义一个位置的离一个\(0\)区间的距离为这个位置离这个区间中\(0\)的距离的最小值,每次询问一个位置 ...
- #2009. 「SCOI2015」小凸玩密室
神仙题啊.完全想不出 首先看方案.可以从任意一个点开始,在这个点要先走完子树,然后走到父亲,再走兄弟,再走父亲的父亲,父亲的兄弟..一直走到1,1的另外一个子树,结束. 完全不会鸭.jpg 设f[i] ...
- 【LOJ】 #2009. 「SCOI2015」小凸玩密室
题解 神仙dp啊QAQ 我们发现我们需要枚举一个起点,遍历完它所有的儿子然后向上爬 设\(f[i][j]\)表示第i个点的子树全部处理完之后到达i深度为j的祖先的兄弟处 我们只需要对叶子节点和只有一个 ...
- LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配
#2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
随机推荐
- 软件工程(FZU2015) 赛季得分榜,第六回合
SE_FZU目录:1 2 3 4 5 6 7 8 9 10 11 12 13 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分=团队得分+个人贡献分 个人贡献分: 个人 ...
- RestTemplete
RestTemplete是由spring提供的,可以用来模拟浏览器进行服务调用的封装好的Api,和Apache 的HttpClient功能相同,在分布式系统中可以用来服务之间的调用. 开发步骤: 1. ...
- 【学习总结】Git学习-参考廖雪峰老师教程六-分支管理
学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...
- CRM系统设计方案
CRM系统设计方案 - 百度文库https://wenku.baidu.com/view/a34eebeb0242a8956bece473.html 服务支持http://www.uf-crm.com ...
- js手机短信验证
贴代码之前,我们先讲一下这里我们用到的技术主要有1个.setInterval(),这个方法可以实现倒计时的效果. css: .weui_btn_disabled.weui_btn_default { ...
- 四、Object.defineProperty总结
Object.defineProperty() 参考:https://segmentfault.com/a/1190000007434923 定义: 方法会直接在一个对象上定义一个新属性,或者修改一个 ...
- 372.Definition of ListNode
单项列表只能把后一个node中的所有数据copy到当前node再delete后一node. /** * Definition of ListNode * class ListNode { * publ ...
- PL/SQL编程--变量声明及赋值
declare v_price ,);--单价 v_usenum number;--水费字数 v_usenum2 number;--使用吨数 begin v_price:=2.45;--每吨单价 v_ ...
- Linux基础学习笔记6-SHELL编程
编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 编程基本概念: 顺序执行:循环执行:选 ...
- Django--CRM
一 . 什么是CRM CRM就是客户关系管理系统(customer relationship management) 二 . 用户登录 # models.py文件 class UserProfile( ...