[树上启发式合并 && 哈希] Codeforces 741D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

微带线,带状线和接地共面波导的区别 阅读详情

日常VP翻车

学一发树上启发式合并,%%%gjghfd
树上启发式合并可以截这里

每次递归做轻儿子,做完后清空轻儿子信息(注意是做完一个轻儿子后发现清空这个),然后做重儿子,再dfs所有轻儿子并跟新当前点的答案,然后把轻儿子信息加进去……

说起来很绕,其实挺好理解的…
每个节点的哈希值就是它到根路径哪些字符出现奇数次,记录就是记录每个哈希值的深度的最大值,然后类似求路径长度搞一搞就好了

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <tr1/unordered_map>
#include <vector>
#define fi first
#define se second

using namespace std;
using namespace tr1;

typedef pair<int,int> ii;

const int N=500010;

int n,ans[N],a[N],hs[N],dpt[N],son[N],sz[N],f[1<<23];
vector<ii> s[N];

inline void fix(int &x,int y){
  if(x<y) x=y;
}

void dfs(int x){
  sz[x]=1;
  for(ii i : s[x]){
    hs[i.fi]=hs[x]^(1<<i.se);
    dpt[i.fi]=dpt[x]+1;
    dfs(i.fi);
    sz[x]+=sz[i.fi];
    if(sz[i.fi]>sz[son[x]]) son[x]=i.fi;
  }
}

void del(int x){
  f[hs[x]]=0;
  for(ii i : s[x]) del(i.fi);
}

void add(int x){
  for(ii i : s[x]) add(i.fi);
  fix(f[hs[x]],dpt[x]);
}

void check(int x,int u){
  if(f[hs[x]]) fix(ans[u],dpt[x]+f[hs[x]]-2*dpt[u]);
  for(int i=0;i<22;i++)
    if(f[hs[x]^(1<<i)]) fix(ans[u],dpt[x]+f[hs[x]^(1<<i)]-2*dpt[u]);
  for(ii i : s[x]) check(i.fi,u);
}

void solve(int x){
  for(ii i : s[x]){
    int u=i.fi;
    if(u!=son[x]) solve(u),del(u);
  }
  if(son[x]) solve(son[x]);
  for(ii i : s[x]){
    int u=i.fi; fix(ans[x],ans[u]);
    if(u!=son[x]) check(u,x),add(u);
  }
  fix(ans[x],f[hs[x]]-dpt[x]);
  for(int j=0;j<22;j++)
    fix(ans[x],f[hs[x]^(1<<j)]-dpt[x]);
  fix(f[hs[x]],dpt[x]);
}

int main(){
  freopen("1.in","r",stdin);
  freopen("1.out","w",stdout);
  scanf("%d",&n);
  for(int i=2;i<=n;i++){
    int p; char c;
    scanf("%d %c",&p,&c);
    s[p].push_back(ii(i,c-'a'));
  }
  dfs(1); solve(1);
  for(int i=1;i<=n;i++) printf("%d ",ans[i]);
  return 0;
}
基于fme和python-docx第三方库批量更新不动产调查表 最近应朋友需要批量更新在不动产成果中提交的各种word报表中的指定数据,根据初步的了解,我做了一个基于fme软件和python-docx第三方库进行一个批量的更新方案。 阅读详情

相关推荐

MySQL根据idb文件恢复数据

恢复前提 MySQL 5.* 和 8.* 的恢复方式大同小异,最基本的区别是8.* 中,不再有表结构frm文件,所以要恢复 8.* 的数据,就必须要有完整的建表语句。 而恢复 5.* 的数据,就需要idb文件和 frm文件,当然,如果有完整的建表语句的话,不用frm文件也行。 恢复步骤 需要注意的是,以下操作需要选定数据库后执行。 5.* 恢复表结构 确定表列数 首先创建一张 与需要恢复数据的表 的名字相同的新表,如果已知原表的字段数量的话,就按照原表字段数建表,字段名和类型都不用考虑,如果不知道数量的话,

weixin_45121446的博客 5447

[Codeforces741D]Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on the tree)

题目描述传送门题解一道细节比较多的dsu on the tree 首先某一个子树中的路径可以分为经过根的和不经过根的,不经过根的可以通过儿子更新过来,所以对于每一棵子树只统计经过根的路径。 经过根的路径又可以分成两种,第一种是到根就结束的,也就是说是根到它子树里某一个点的一条链,这个可以在dfs的时候统计。 第二种是路径的两个端点分别在根的两个儿子的子树里。令s(i)表示1到i的路径的状态,状

zyf2000 1127

IEEE LaTeX模板中algorithm排版避坑指南:如何优雅地嵌入算法描述?

本文详细解析了在IEEE LaTeX模板中优雅排版algorithm的实用技巧,包括基础配置、高级自定义及常见问题解决方案。通过嵌套环境与[H]参数的应用,帮助研究者克服IEEEtran模板对算法排版的限制,实现专业且美观的算法呈现。

weixin_28340315的博客 408

CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths (dsu on tree) 题解

先说一下dsu算法。 例题:子树众数问题。 给出一棵树,每个点有点权,求每个子树中出现次数最多的数的出现次数。 树的节点数为n,n≤500000n≤500000n \leq 500000 这个数据范围,O(nn−−√)O(nn)O(n \sqrt n)直接莫队会超时。 考虑一种暴力做法: 开一个全局数组,记录每中数的出现次数。 依次对每个点,用dfs遍历它的子树,并记录每种数的出现次...

weixin_42465242的博客 720

从零搭建云手机:基于Docker与KVM的实战指南

本文提供了一份基于Docker与KVM从零搭建私有云手机的实战指南。详细介绍了服务器配置选择、KVM虚拟化环境检查、Docker容器部署以及通过VNC进行远程访问的全过程。该方案轻量高效,适合应用测试、手游多开及自动化脚本运行等场景,帮助用户低成本拥有高性能云端安卓设备。

weixin_29208327的博客 558

工业级24V电源保护电路深度解析:五重防护机制详解

自恢复保险丝(PPTC,Positive Temperature Coefficient)是一种过流保护元件✅可恢复:过流后自动恢复,无需更换⚡响应快:电流超标立即动作🔄多次使用:在额定范围内可反复使用第1层(F1):阻挡过流 → 物理熔断第2层(D3):吸收浪涌 → 能量泄放第3层(Q1):防止反接 → 逻辑阻断第4层(Q2/Q3):抵御过压 → 主动切断第5层(CR):平滑启动 → 时序控制设计哲学:"让每一级保护专注做好一件事"通过这篇文章,我们深入理解了:✅自恢复保险丝。

qq_58068673的博客 3570

【题解】codeforces741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

题目链接 题意:给定一棵有根树,结点编号为1~n,根结点为结点1。每条边上有一个字母,求各子树内最长的满足“路径上的字母经过重排后可以构成回文串”的简单路径。 分析:对结点u,用2进制数vec[u]表示结点u到根结点的路径上各字母的数目的奇偶性。若第i个字母数目为奇数则vec[u]的第i位为1,否则为0。子树u内满足要求的路径可以分成两类,一类经过结点u,一类不经过结点u。由于不经过结点u的路

ZJZ的博客 1486

YOLOv13涨点改进 | 全网独家创新、HyperACE改进、注意力改进篇 | CVPR 2025| 引入LRSA局部区域自注意力模块,能提升其在细节捕捉、小目标检测和长距离依赖建模方面的能力

本文提出将LRSA(局部区域自注意力)模块集成到YOLOv13中,通过局部特征交互增强细节捕捉能力、小物体检测精度和长距离依赖建模。LRSA模块采用重叠图像块处理策略,在保持计算效率的同时提升复杂背景下的检测性能。文章详细介绍了模块结构、原理优势,并提供了三种改进方案:1)在主干网络添加LRSA层;2)将关键模块替换为DSC3k2_LRSA;3)采用HyperACE_LRSA结构。配套提供了完整的PyTorch实现代码和YAML配置文件,展示了该模块如何通过局部注意力机制平衡检测精度与推理速度。

Ai缝合怪、助力小伙伴高效发论文 345

Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

Just in case somebody missed it: we have wonderful girls in Arpa’s land. Arpa has a rooted tree (connected acyclic graph) consisting of n vertices. The vertices are numbered 1 through n, the vertex 1 is the root. There is a letter written on each edge of t

sky123博客 445

【毕设实战】基于YOLOv8的HRSC2016船舶智能检测系统开发全指南(含可视化UI界面,打造海事领域高分毕设)

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

know_F0727的博客 130

AI算力网络与通信领域QoS保障的测试方法

在当今数字化时代,AI技术蓬勃发展,AI算力网络应运而生。它将分布在不同地理位置的算力资源进行整合,以高效地支持各种AI应用,如深度学习训练、智能图像识别等。而通信领域则是信息传输的基石,确保数据能够准确、快速地在不同节点之间传递。QoS保障在通信领域至关重要,它可以确保不同类型的业务(如语音通话、视频会议、在线游戏等)获得与其需求相匹配的服务质量。在AI算力网络中,QoS保障同样不可或缺,因为AI任务对网络的带宽、延迟、可靠性等指标有严格要求。

AI算力网络与通信的博客 526

E. Lomsat gelral(树上启发式合并)

树上启发式合并abababbababab

zydzyd521的博客 326

python中使用squarify包可视化treemap图:为treemap图添加标题并自定义标题的字体大小、自定义设置treemap中标签字体的大小、添加数值数值标签、自定义设置边框的色彩

python中使用squarify包可视化treemap图:treemap将分层数据显示为一组嵌套矩形自定义设置每一个数据格的颜色、添加数值数值标签、自定义设置边框的色彩、自定义设置边框线条的粗细、为treemap图添加标题并自定义标题的字体大小、自定义设置treemap中标签字体的大小

data+scenario+science+insight 1061

[CF741D] Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

又是玄学的dsu on tree ,这次还用到了二进制状压的思想...... 用二进制压一个x表示根到节点的链上的字符信息,奇数个为1,偶数个为0。 那么如果x的二进制表示里有不多于一个1,那么重排后就能形成回文串啦。 对于两条链,如果想合并信息,异或一下就OK。 这个题很难想啊...... 简单地说,就是子树里乱搞啦~哈哈哈~ 然后用dsu on tree搞一下,据说用(dfs序+f...

weixin_30912051的博客 153

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 树启 + 状压

传送门 文章目录题意:思路: 题意: 思路: 据说是树启的压轴题。 先观察题意,字符有1−221-221−22中,为什么不是1−261-261−26个?显然他就是让你状压的。我们考虑将每条路径上字符状压成statestatestate,让后从111开始遍历,记从111到iii的路径上的statestatestate为dis[i]dis[i]dis[i]。 再观察一下回文的性质,回文中奇数个字母最多只有一个,如果两条路径能构成回文,那么他们的dis[i]  xor  

m0_51068403的博客 569

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Codeforces 600E - Lomsat gelral(树上启发式合并)

600E - Lomsat gelral 题意 给出一颗以 1 为根的树,每个点有颜色,如果某个子树上某个颜色出现的次数最多,则认为它在这课子树有支配地位,一颗子树上,可能有多个有支配的地位的颜色,对每颗子树分别求有支配地位的颜色的和(把颜色这个权值相加)。 分析 树上启发式合并模板题。 参考blog1 参考blog2 复杂度证明 如果暴力去搜索,显然是 \(O(n^2)\) 的算法,可以考虑优化...

weixin_34023982的博客 182

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

树上启发式合并+点分治思想 CF741D

再加上字母数不是很多,我们直接按位状压,某一位为1就代表改字母出现了奇数次(特意强调只有22个字母,摆明了就是要状压),那么,如果点对u,v之间的路径的异或和等于0或者是2的幂次,这条路径重排之后就是一个回文串了。显然,如果u,v之间的路径满足条件的话,我们同样可以O(1)的得到路径长度=dep[u]+dep[v]-2*dep[lca]其实就是第一种情况,只不过过的根是u的子孙节点,我们只要在dfs的时候让父节点的答案更新一下就可以了。的话,会发现这种树上点对异或的东西还是比较套路的。

sophilex的博客 495

Codeforces 741D dsu on tree

题意 传送门 Codeforces 741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 题解 若某条路径的字符可以构成回文串,则至多一个字符数量为奇数,那么关注字符的奇偶性即可。设字符集的规模为 BBB,对字符集的奇偶性进行状态压缩,满足条件的两个字符集状态异或结果至多存在一个 111。若某个字符集的状态,O(B)O(B)O(B) 即可枚举满足条件的另一个状态。 dsu on tree 维护子树中各个节点字符集状态对应的最大深度,统

neweryyy的博客 1195

【dsu on tree】Codeforces741D[Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths]题解

题目概述给出一棵 nn 个节点的树,边权是小写字母( aa 到 vv ),若一条链上的小写字母可以打乱排列成回文则称该链满足条件。求每个节点子树中最长的满足条件的链。解题报告询问子树不修改果断上dsu on tree。能打乱排列成回文说明至多只有一个字母出现了奇数次,因为字母只有 2222 个,所以位运算异或就可以快速判断。至于求答案……因为dsu on tree是大暴力,所以瞎搞就行了……示例程序

ZigZagK的博客 563

Codeforces 741D D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 树上启发式合并

D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output

J. Cole 751

Codeforces741D

dsu on tree 题目链接 点我跳转 题目大意 一棵根为 \(1\) 的树,每条边上有一个字符(\(a-v\)共\(22\)种) 一条简单路径被称为Dokhtar-kosh当且仅当路径上的字符经过重新排序后可以变成一个回文串。 求每个子树中最长的Dokhtar-kosh路径的长度。 解题思路 \(dsu\) \(on\) \(tree\) + 状态压缩 1.重排后构成回文的条件为...

qq_38227632的博客 186

CodeForces 741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 树上启发式合并+状态压缩

#include<bits/stdc++.h> using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++) #define ll long long #define lrt int l,int r,int rt #define lson l,m...

满月照亮的路 466

[dsu on tree] Codeforces #741D. Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths

考虑一个字符集,若能排成回文串,则出现个数是奇数的字符种数是0或1。字符有22种,就想到异或。 合法的链 (x,y)(x,y) 满足 s(x) xor s(y)=0或2is(x)\text{ xor }s(y)=0或2^{i}。 直接 dsu on tree 瞎搞。 #include<cstdio> #include<vector> #include<algorithm> using names

Lynstery's blog 652

codeforces 741 D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths (dsu on the tree)

D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output

clover_hxy的博客 856

CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

一、题目 点此看题 二、解法 可以把颜色的出现情况压缩成一个二进制,然后处理出每个点到根的异或和,一条路径的异或和就是d[u]⊕d[v]d[u]\oplus d[v]d[u]⊕d[v],然后就用树上启发式合并就行了,合并之前先询问,询问时可以允许至多一位上是奇数。 #include <cstdio> #include <vector> #include <iostream> using namespace std; const int M = 500005; int re

C202044zxy的博客 303

CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(树上启发式合并)

题意 题面比题目还短。 给一棵树,边上有一个字母(只有a到v共22个)。一条简单路径被称为Dokhtar-kosh当且仅当路径上的字符经过重新排序后可以变成一个回文串。 求每个子树中最长的Dokhtar-kosh路径的长度。 鬼畜: 思路 一条路径符合要求,当他只有0或1种字母出现奇数次,所以用一个二进制数记录一条路径。 一条简单路径可以看成两条从根出发的链连在一起,表示为x&amp;Thick...

xyyxyyx的博客 599
上一篇: [DP] Codeforces 840C .On the Bench
下一篇: [字符串HASH && 阈值]Codeforces 741E.Arpa’s abnormal DNA and Mehrdad’s deep interest
LowestJN
博客等级 码龄10年 76粉丝 422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值