神仙题啊。完全想不出

首先看方案。可以从任意一个点开始,在这个点要先走完子树,然后走到父亲,再走兄弟,再走父亲的父亲,父亲的兄弟。。一直走到1,1的另外一个子树,结束。

完全不会鸭.jpg

设f[i][j]是走完i的子树,再走到i的第j个祖先的最小花费。那么上面的方案可以表示成:f[x][1](走完x的子树再走到x父亲)+(x父亲~x兄弟)+f[(x兄弟)][1](x兄弟走完了走到x父亲的父亲)+...

那么怎么求f呢,感觉不是很好求

再来一个:g[i][j]是走完i的子树,再走到i的第j个祖先的兄弟的最小花费。

那么就很好转移了,分情况讨论即可,不难,见代码



#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
ll a[200010],b[200010],dep[200010];
ll w[200010][19];//w[i][j]是i到i的第j个祖先的距离
ll f[200010][19],g[200010][19];
int main(){
#ifndef ONLINE_JUDGE
freopen("4253.in","r",stdin);
freopen("4253.out","w",stdout);
#endif
int n=gi();
for(int i=1;i<=n;++i)a[i]=gi();
for(int i=2;i<=n;++i)b[i]=gi();
for(int i=1;i<=n;++i){
dep[i]=dep[i>>1]+1;
w[i][1]=b[i];
for(int j=2;j<=dep[i] ;++j)
w[i][j]=w[i>>1][j-1]+b[i];
}
for(int i=n;i;--i){
for(int j=0;j<=dep[i];++j){
if((i<<1|1)<=n){// 2个儿子,要枚举先走到哪一个儿子去
f[i][j]=std::min(g[i<<1][0]+b[i<<1]*a[i<<1]+f[i<<1|1][j+1],g[i<<1|1][0]+b[i<<1|1]*a[i<<1|1]+f[i<<1][j+1]);
g[i][j]=std::min(g[i<<1][0]+b[i<<1]*a[i<<1]+g[i<<1|1][j+1],g[i<<1|1][0]+b[i<<1|1]*a[i<<1|1]+g[i<<1][j+1]);
}else if((i<<1)<=n){// 1个儿子,直接走到这个儿子然后继续
f[i][j]=f[i<<1][j+1]+b[i<<1]*a[i<<1];
g[i][j]=g[i<<1][j+1]+b[i<<1]*a[i<<1];
}else{// 叶子,子树走完了可以直接跳到j所指向的点
f[i][j]=w[i][j]*a[i>>j];
g[i][j]=(w[i][j+1]+b[(i>>j)^1])*a[(i>>j)^1];
}
}
}
ll ans=2e18;
for(int i=1;i<=n;++i){//枚举起点
ll res=f[i][1];//先走完i的子树,然后走到i的父亲
for(int j=i>>1,lst=i;j;lst=j,j>>=1){
if((lst^1)<=n)res+=b[lst^1]*a[lst^1]+f[lst^1][2];
else res+=b[j]*a[j>>1];
}
ans=std::min(ans,res);
}
printf("%lld\n",ans);
return 0;
}

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

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

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

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

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

  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. C#获取文件路径的几种方法

    //获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称. string str5=Application.StartupPath;//可获得当前执行的exe的文件名. string str1 ...

  2. WeakValue & StoreValue

    WeakValue & StoreValue 源码 https://github.com/YouXianMing/WeakValue-StoreValue 说明 1. 这种设计并不是因为脑袋被 ...

  3. 零基础图文傻瓜教程接入Facebook的sdk

    零基础图文傻瓜教程接入Facebook的sdk 本人视频教程系类   iOS中CALayer的使用 0. 先解决你的 VPN FQ上外网问题,亲,解决这一步才能进行后续操作^_^. 1. 点击右侧链接 ...

  4. 查看oracle数据库版本

    1. 登录sysdba用户 sqlplus / as sysdba 2. 方法一:v$version SQL> select * from v$version; 3.  方法二:product_ ...

  5. memset struct含有string的崩溃

    2019/4/2 补充一下 这里如果填充为0,则不会崩溃,填充为非0时,再次调用赋值就会崩溃 推测非0拷贝破坏了string内部的数据结构,不要对任何类使用memset https://blog.cs ...

  6. springmvc入门之HelloWorld篇

    springmvc是一个基于spring的mvc框架,各种优点啥的用过就知道了.下面开始讲HelloWorldController的实现. 1.开发环境搭建<导jar包+配置文件> 1.1 ...

  7. DIV+CSS:如何编写代码才能更有效率

    如何编写CSS代码才能更有效率?这是许多网页制作者与开发者都关心的问题.大概没有什么魔法,可以保证一下就把你的样式表缩小到百分之多少,但合理的 CSS 编码与组织技巧,的确能够帮助你的更有效率地写出更 ...

  8. luogu P3391 【模板】文艺平衡树(Splay)

    嘟嘟嘟 突然觉得splay挺有意思的-- 这道题只有一个任务:区间翻转. 首先应该知道的是,splay和线段树一样,都可以打标记,然后走到每一个节点之前先下传. 那怎么打标记呢?还应该有"区 ...

  9. CVE-2014-4210SSRF漏洞分析

    直接定位SearchPublicRegistries.jsp文件,47行接受输入的变量. 结果输出位置在120行 SearchPublicRegistries.jsp引入com.bea.uddiexp ...

  10. 为什么can接口要接通用CAN隔离收发器啊?

    为什么can接口要接通用CAN隔离收发器啊? 主要是为了实现远端接地环路断开的系统,让接口允许在很大的共模电压变化下保证可靠通讯.通常使用CAN通讯的系统,都是要实现远距离可靠通讯,这也恰恰是CAN- ...