当前位置: 首页 > news >正文

打卡信奥刷题(3290)用C++实现信奥题 P8966 觅光 | Searching for Hope (easy ver.)

P8966 觅光 | Searching for Hope (easy ver.)

题目背景

这是本题的简单版本。两个版本在100 % \bm{100 \%}100%数据范围的唯一区别是关于n \bm{n}n的限制。此版本中n ≤ 1000 \bm{n \le 1000}n1000


有梦中所向往的地方,也有现实中可望不可触及的远方。

我们正等待无数次的希望,新的纪元,生命不曾奏响终章。

顷刻间颠覆中的一切,天空坠落到海底,死死卡住呼吸者的全部。羽翼裹满刺骨的海水,悲伤到从此遗忘呼吸的意义。

明明与空气只隔着毫厘,却不想再尝试去呼吸。我开始明白,悲伤到了极点,也许不会流泪

神明借着生的名义,捏造出灰暗的真理。

泪水模糊眼眶,身躯坠进天空,泛白的天光,不得已照亮这一日的希望。

题目描述

现在有一棵n nn个节点的有根二叉树。

凡人与神明在这棵树上进行一个游戏。凡人需要从根投下若干个球,每个球带1 11单位正电荷或带1 11单位负电荷。

树上每一个点有容量,第i ii个点可以容纳c i c_ici个球。初始每一个点容纳的球数为0 00。我们称一个点被充满当且仅当它容纳的球的个数等于它的容量。

每一次一个球下落到一个点时:

  • 如果该点没有孩子节点或者所有孩子节点上都已经充满球,则停止,该点容纳的球的个数+ 1 +1+1
  • 如果该点恰有一个孩子节点未充满,则向那个孩子下落;
  • 如果有2 22个孩子节点均未充满:
    • 如果左侧子树中所有球的电荷代数和大于右侧子树所有球的电荷代数和,则如果当前球带正电则向右下落,否则向左下落;
    • 如果左侧子树中所有球的电荷代数和小于右侧子树所有球的电荷代数和,则如果当前球带正电则向左下落,否则向右下落;
    • 如果左侧子树中所有球的电荷代数和等于右侧子树所有球的电荷代数和,则由神明决定向哪个方向下落。

其中,电荷代数和指的是正电荷的数量减去负电荷的数量。

在游戏开始前,双方约定目标点u uu。在一个回合中,凡人选择这次投下的球的电性,神明按上述规则控制球的下落过程。当u uu被充满时,游戏结束。

凡人希望游戏回合数尽量少,神明希望游戏回合数尽量多。假设双方足够聪明。

对所有:1 ≤ u ≤ n 1\leq u\leq n1un,求游戏轮数r u r_uru

输入格式

第一行,一个正整数n nn

第二行,n − 1 n-1n1个整数f 2 , f 3 , … , f n f_2, f_3, \ldots, f_nf2,f3,,fn,其中f i f_ifi代表i ii的父亲的编号。

第三行,n nn个整数c 1 , c 2 , … , c n c_1, c_2, \ldots, c_nc1,c2,,cn

输出格式

输出一行,n nn个整数r 1 , r 2 , … , r n r_1, r_2, \ldots, r_nr1,r2,,rn

输入输出样例 #1

输入 #1

5 1 1 2 2 1 1 1 1 1

输出 #1

5 4 2 3 3

说明/提示

【数据范围】

本题采用捆绑测试。

子任务编号n ≤ n \len特殊性质分值
11000 10001000A11
210 1010B27
31000 1000100062
  • 特殊性质 A:树退化成一条以1 11为一端的链。
  • 特殊性质 B:c i = 1 c_i = 1ci=1

对于100 % 100\%100%的数据,2 ≤ n ≤ 1000 2 \le n \le 10002n1000,满足树是以1 11为根的二叉树,1 ≤ f i < i 1 \le f_i < i1fi<i1 ≤ c i ≤ 10 12 1 \le c_i \le {10}^{12}1ci1012

C++实现

#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;main(){ios::sync_with_stdio(false);intn;cin>>n;vector<int>p(n,-1),c(n),s(n);vector<array<int,2>>k(n,{-1,-1});for(inti=1;i<n;i++){intx;cin>>x;p[i]=--x;(~k[x][0]?k[x][1]:k[x][0])=i;}// 建树for(auto&i:c)cin>>i;function<void(int)>dfs=[&](intu){if(~k[u][0])dfs(k[u][0]),s[u]+=s[k[u][0]];if(~k[u][1])dfs(k[u][1]),s[u]+=s[k[u][1]];};// 预处理子树和s=c,dfs(0);for(inti=0;i<n;i++){intx=i,c=s[i];while(~p[x]){intb=(x==k[p[x]][0]?k[p[x]][1]:k[p[x]][0]);c+=min(c,~b?s[b]:0),x=p[x];}// 暴力找父亲,更新答案cout<<c<<' ';}cout<<endl;return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

http://www.cnnetsun.cn/news/2481610.html

相关文章:

  • 从单人创作到百人协同:Midjourney团队计划功能如何重构AIGC生产力范式(含Figma+Notion+MJ三方联动实测数据)
  • 拆解5G核心网:用蓝桥杯仿真平台复现一个微型SA组网
  • ARMv8开发实战:Cortex-A55的L1/L2 Cache为啥用Exclusive策略?一个例子讲透
  • 别再为Gurobi学术许可发愁了!手把手教你从申请到激活(附学信网报告攻略)
  • IS6201A数字多相PWM控制器实战:从选型、配置到PCB布局避坑指南
  • RT-Thread移植GD32VF103 RISC-V开发板实战:环境配置、BSP修改与问题排查
  • 龙芯2k1000LA实战:从零部署Loongnix系统与核心外设驱动配置
  • 【Perplexity环境新闻搜索实战指南】:20年老炮亲授3大避坑法则与实时情报提纯术
  • PRINCE:为嵌入式安全而生的轻量级分组密码
  • 从 API 密钥管理与审计日志功能看 Taotoken 的企业级安全支持
  • 告别VMware 15.5后Win10系统优化:手动清理残留服务与虚拟网卡指南
  • 从手机视频到3D场景:手把手教你用FFmpeg和COLMAP准备3DGS训练数据
  • 制造业品质失效案例:从散落孤岛到AI智能查询与数据统计
  • 从TT100K到YOLO格式:一份避坑指南帮你搞定数据集转换与划分(附完整代码)
  • 别再只用Lerp了!用Unity的Quaternion.Slerp让你的3D角色旋转更平滑(附C#代码示例)
  • ICode国际青少年编程竞赛-Python入门:从Dev.step到Spaceship.turn的探索之旅
  • 【面试】HR
  • 新手避坑指南:用PHPStudy 8.1和PHP 5.6搭建XHCMS靶场,手把手解决版本兼容问题
  • 别再死记公式了!用Python+SymPy玩转平衡电桥,5分钟搞定复杂电路等效电阻
  • MATLAB数据分析实战:用prctile函数快速计算四分位数和中位数(附代码)
  • 从飞思卡尔智能车竞赛看嵌入式系统开发:架构、算法与调试实战
  • Kubernetes GitOps 实践:使用 Argo CD 实现持续部署
  • mNetAssist:免费高效的网络调试工具完整实战指南
  • 【技术底稿 39】自测阶段看不下去:一次缓存 + MyBatis-Plus 联合性能改造
  • 从‘盲猜’到‘先知’:深度解读神经RRT*如何让采样规划拥有‘大局观’
  • 别再傻傻用for循环了!英飞凌TC3X7的STM定时器,这样写延时函数才专业
  • 运筹优化入门:手把手教你用YALMIP+CPLEX在MATLAB里解第一个线性规划问题
  • 测试工程师的人生规划:如何平衡测试工作和生活
  • VAP特效动画实战指南:3步掌握跨平台高性能动画制作
  • Linux服务器CUDA Toolkit安装避坑指南:从驱动兼容性检查到环境变量永久生效