「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」小凸玩密室 解题报告的更多相关文章

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

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

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

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

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

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

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

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

  5. 「SCOI2015」小凸想跑步 解题报告

    「SCOI2015」小凸想跑步 最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质 实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了 Code: #include & ...

  6. 「SCOI2015」小凸解密码 解题报告

    「SCOI2015」小凸解密码 题意:给一个环,定义一段连续的极长\(0\)串为\(0\)区间,定义一个位置的离一个\(0\)区间的距离为这个位置离这个区间中\(0\)的距离的最小值,每次询问一个位置 ...

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

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

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

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

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

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

随机推荐

  1. agora入门案例

    一,下载agora的WebSDK 二,运行index.html 三,输入appID 1.找到appID 2.页面输入appID,查看效果

  2. .net 报错汇总——持续更新

    1.未能找到 CodeDom 提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPla PM> Install-Package Microsoft ...

  3. C#封装SQLite数据库

    网上有许多介绍关于SQLite数据库的,这里我就不多说了,这里主要介绍SQLite数据库在C#中的应用,它的应用主要依赖于System.Data.SQLite.dll文件,可以点击这里下载https: ...

  4. Linux df 与du用法

    df 查看一级目录的大小,但是不能查看文件的大小.du 可以查看目录或者文件大小. 1 df的基本用法 df命令可以显示目前所有文件系统的总空间及当前可用空间,用法如下: -a 全部文件系统列表-h ...

  5. Angular 自定义指令传参

    <!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...

  6. k8s使用glusterfs做存储

    一.安装glusterfs https://www.cnblogs.com/zhangb8042/p/7801181.html 环境介绍; centos 7 [root@k8s-m ~]# cat / ...

  7. flask Django保存session区别

    '''Django中,session保存在服务端的数据库中,数据库中保存请求用户的所有数据,服务端数据中{'随机字符串':加密后的客户相关信息}请求完成后,把随机字符串作为值,返回给客户端,保存在客户 ...

  8. Mybatis之执行insert、update和delete操作时自动提交

    单独使用Mybaits,而没有集成Spring的话,执行insert.update和delete操作是不会自动提交的,即执行语句后不会在数据库有对应的数据变化. 解决这样的方法就是打开自动提交开关,在 ...

  9. Java多线程之Join方法阻塞线程

    package org.study2.javabase.ThreadsDemo.status; /** * @Auther:GongXingRui * @Date:2018/9/19 * @Descr ...

  10. Mysql(Mariadb)数据库主从复制

    Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据 ...