news 2026/4/15 20:46:32

打卡信奥刷题(3111)用C++实现信奥题 P7310 [COCI 2018/2019 #2] Deblo

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(3111)用C++实现信奥题 P7310 [COCI 2018/2019 #2] Deblo

P7310 [COCI 2018/2019 #2] Deblo

题目描述

给定一个包含n nn个结点的树,其中每个结点都有一个权值。一条路径的权值定义为该路径经过的所有结点的权值异或后的结果。

你的任务是求出所有路径的权值之和。

输入格式

第一行输入正整数N NN,表示树的结点个数。

第二行输入N NN个用空格分隔的整数v i v_ivi,第i ii个整数表示结点i ii的权值。

接下来的N − 1 N-1N1行,每行输入整数a j , b j a_j,b_jaj,bj,表示a j , b j a_j,b_jaj,bj之间有一条边。

输出格式

输出所有路径的权值之和。

输入输出样例 #1

输入 #1

3 1 2 3 1 2 2 3

输出 #1

10

输入输出样例 #2

输入 #2

5 2 3 4 2 1 1 2 1 3 3 4 3 5

输出 #2

64

输入输出样例 #3

输入 #3

6 5 4 1 3 3 3 3 1 3 5 4 3 4 2 2 6

输出 #3

85

说明/提示

样例 1 解释

路径1 → 1 1 \to 111的权值为1 11

路径1 → 2 1 \to 212的权值为1 ⊕ 2 = 3 1⊕2=312=3

路径1 → 3 1 \to 313的权值为1 ⊕ 2 ⊕ 3 = 0 1⊕2⊕3=0123=0

路径2 → 2 2 \to 222的权值为2 22

路径2 → 3 2 \to 323的权值为2 ⊕ 3 = 1 2⊕3=123=1

路径3 → 3 3 \to 333的权值为3 33

所有路径的权值之和为1 + 3 + 0 + 2 + 1 + 3 = 10 1+3+0+2+1+3=101+3+0+2+1+3=10

数据规模与约定

对于30 % 30\%30%的数据,N ≤ 200 N \le 200N200

对于50 % 50\%50%的数据,N ≤ 1000 N \le 1000N1000

对于另外20 % 20\%20%的数据,x = 1 , 2 , ⋯ , N − 1 x=1,2,\cdots,N-1x=1,2,,N1中的每个结点都和结点x + 1 x+1x+1之间有一条边。

对于100 % 100\%100%的数据,1 ≤ a j , b j ≤ N ≤ 10 5 1 \le a_j,b_j \le N \le 10^51aj,bjN1050 ≤ v i ≤ 3 × 10 6 0 \le v_i \le 3 \times 10^60vi3×106

说明

本题分值按 COCI 原题设置,满分90 9090

题目译自 COCI2018-2019 CONTEST #2T3 Deblo

C++实现

#include<bits/stdc++.h>usingnamespacestd;inlineintread(){intx=0,f=1;charch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();returnx*f;}#definelllonglongconstintmaxn=1e5+20;inta[maxn],n,head[maxn],idx,dp[maxn][2],mul[40];ll ans;structnode{intnxt,to;}e[maxn<<1];inlinevoidadd(intu,intv){e[++idx].to=v,e[idx].nxt=head[u],head[u]=idx;}voiddfs(intu,intfa,intw){for(inti=head[u];i;i=e[i].nxt){intv=e[i].to;if(v==fa)continue;dfs(v,u,w);ans+=1ll*dp[u][1]*dp[v][0]*mul[w]+1ll*dp[u][0]*dp[v][1]*mul[w];if(a[u]&1)dp[u][0]+=dp[v][1],dp[u][1]+=dp[v][0];elsedp[u][0]+=dp[v][0],dp[u][1]+=dp[v][1];}dp[u][a[u]&1]++;ans+=1ll*dp[u][1]*mul[w];}intmain(){mul[0]=1;for(inti=1;i<=30;i++)mul[i]=mul[i-1]*2;n=read();for(inti=1;i<=n;i++)a[i]=read();intu,v;for(inti=1;i<n;i++)u=read(),v=read(),add(u,v),add(v,u);for(inti=0;i<=30;i++){dfs(1,0,i);for(intj=1;j<=n;j++)a[j]>>=1,dp[j][0]=dp[j][1]=0;}printf("%lld\n",ans);return0;}

后续

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 16:45:40

Flutter中使用url_launcher实现多应用市场评分跳转的完整指南

Flutter跨平台应用市场评分跳转实战&#xff1a;从原理到高阶优化 在移动应用生态中&#xff0c;用户评分直接影响着应用商店的排名和用户下载决策。根据Sensor Tower的研究数据显示&#xff0c;平均星级提升0.1分可以带来高达15%的下载量增长。对于Flutter开发者而言&#xff…

作者头像 李华
网站建设 2026/4/15 17:27:40

Siemens NX GPU加速演进史:从光线追踪支持到图形性能飞跃

1. Siemens NX GPU加速技术发展概述 Siemens NX作为工业设计领域的标杆软件&#xff0c;其图形处理能力的进化史堪称一部硬件加速技术的编年史。记得我第一次接触NX 1847版本时&#xff0c;即使配备了当时顶级的RTX 2080显卡&#xff0c;开启光线追踪功能后仍然卡顿得让人抓狂…

作者头像 李华
网站建设 2026/4/14 16:09:24

LiuJuan20260223Zimage实战体验:输入提示词,秒出专属风格图片

LiuJuan20260223Zimage实战体验&#xff1a;输入提示词&#xff0c;秒出专属风格图片 1. 引言&#xff1a;一个简单却惊艳的专属图片生成器 你有没有想过&#xff0c;只需要输入一个名字或一个简单的词&#xff0c;就能立刻得到一张风格独特、质量上乘的图片&#xff1f;不是…

作者头像 李华
网站建设 2026/4/14 16:07:34

运维工程师的AI利器:Phi-3-mini自动化巡检脚本生成与日志分析

运维工程师的AI利器&#xff1a;Phi-3-mini自动化巡检脚本生成与日志分析 1. 运维自动化的新选择 凌晨三点&#xff0c;服务器告警铃声又一次把张工从睡梦中惊醒。作为拥有8年经验的运维工程师&#xff0c;他早已习惯了这种"救火队员"式的工作节奏。但最近&#xf…

作者头像 李华
网站建设 2026/4/14 16:05:23

【限时解禁】SITS2026白皮书未公开附录曝光:含8项评测基准原始数据、3家头部厂商闭门测试对比表

第一章&#xff1a;SITS2026发布&#xff1a;多模态大模型白皮书 2026奇点智能技术大会(https://ml-summit.org) SITS2026白皮书正式定义了新一代多模态大模型的架构范式与评估基准&#xff0c;聚焦于跨模态对齐、实时推理压缩与人类意图可解释性三大核心突破。该白皮书由全球…

作者头像 李华