蓝色背景上有个类似灯泡的是啥app
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝色背景上有个类似灯泡的是啥app相关的知识,希望对你有一定的参考价值。
参考技术A 应该是手机自带的“会员服务”app。功能:
1、设备中心:多设备维修方式一目了然。不同设备,推荐不同的服务。
2、服务店查询:快速找到最近服务店。地址、联系电话、营业时间一应俱全。
3、寄修服务:省时放心,便捷下单,上门取件。寄修双向免邮费,方便与实惠兼得。
4、智慧屏上门:选择产品型号,专业服务工程师上门。安装/维修, 足不出户享便捷。
5、备件价格:提前了解设备相关备件的价格。官方质量保证,价格公开透明。
「SCOI2015」小凸玩密室
题目描述
小凸和小方相约玩密室逃脱,这个密室是一棵有 $n$ 个节点的完全二叉树,每个节点有一个灯泡。点亮所有灯泡即可逃出密室。每个灯泡有个权值 $A_i$,每条边也有个权值 $b_i$。
点亮第 $1$ 个灯泡不需要花费,之后每点亮一个新的灯泡 $V$ 的花费,等于上一个被点亮的灯泡 $U$ 到这个点 $V$ 的距离 $D(u, v)$,乘以这个点的权值 $A_v$。
在点灯的过程中,要保证任意时刻所有被点亮的灯泡必须连通,在点亮一个灯泡后必须先点亮其子树所有灯泡才能点亮其他灯泡。请告诉他们,逃出密室的最少花费是多少。
数据范围
$1 leq N leq 2 imes 10 ^ 5, 1 < A_i, B_i leq 10 ^ 5$
题解
考虑暴力, $f_{i,j}$ 表示走完 $i$ 子树,直接走到 $j$ 的最小花费,转移考虑用左右儿子转移。
可以发现我们只需要知道 $j$ 为 $i$ 的祖先或者祖先的另一个儿子的 $f$ 值即可,于是复杂度降至 $nlogn$ 。
注意 $i$ 为叶子或者 $i$ 只有左儿子的情况。
代码
#include <bits/stdc++.h> #define LL long long using namespace std; const int N=2e5+5; int n;LL a[N],b[N],f[N][20],g[N][20],ans=2e18; int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%lld",&a[i]); for (int i=2;i<=n;i++) scanf("%lld",&b[i]),b[i]+=b[i>>1]; for (int i=n,l,r;i;i--){ l=i<<1;r=l|1; for (int j=i,x,y=1;j>1;j>>=1,y++){ x=j^1; if (l>n) f[i][y]=a[x]*(b[i]+b[x]-(b[j>>1]<<1)); else if (r>n) f[i][y]=f[l][y+1]+a[l]*(b[l]-b[i]); else f[i][y]=min(a[l]*(b[l]-b[i])+f[l][1]+f[r][y+1], a[r]*(b[r]-b[i])+f[r][1]+f[l][y+1]); } } for (int i=n,l,r;i;i--){ l=i<<1;r=l|1; for (int j=i>>1,y=1;;j>>=1,y++){ if (l>n) g[i][y]=a[j]*(b[i]-b[j]); else if (r>n) g[i][y]=g[l][y+1]+a[l]*(b[l]-b[i]); else g[i][y]=min(a[l]*(b[l]-b[i])+f[l][1]+g[r][y+1], a[r]*(b[r]-b[i])+f[r][1]+g[l][y+1]); if (!j) break; } } for (int j,x,i=1;i<=n;i++){ LL v=g[i][1];j=i>>1;x=i^1; while(j){ if (x>n) v+=a[j>>1]*(b[j]-b[j>>1]); else v+=a[x]*(b[x]-b[j])+g[x][2]; x=j^1;j>>=1; } ans=min(ans,v); } return cout<<ans<<endl,0; }
以上是关于蓝色背景上有个类似灯泡的是啥app的主要内容,如果未能解决你的问题,请参考以下文章