题解:CF291E Tree-String Problem

news/2025/11/2 22:15:03/文章来源:https://www.cnblogs.com/CharlieCai/p/19185545

题意

给定一棵树,树的边上有字符串,字符串可以按照由父亲到儿子的方向拼接,求模式串 \(t\) 出现的次数。

思路

直接使用哈希。提前预处理出模式串 \(t\) 对应的哈希值,在搜索时计算当前点到儿子之间的边上的字符串对应的哈希值,并将其加入数组中,这样我们就得到了根节点到当前节点之间所有边上字符串拼接起来得到的长串的哈希值。计算答案的时候为了避免重复计算,只需要统计新加入的这一段(当前节点到儿子)上的每个字母为终点是否可以匹配。在回溯时记得更新长串的长度,减掉新加的字符串。

代码

#include<bits/stdc++.h>
#define int unsigned long long
#define MAXN 1000005
#define base 1331
using namespace std;
const int inf=1e18;
int n,m,cnt,head[MAXN],has[MAXN],len,hs,ans,p[MAXN];
string t;
struct Edge{int value,next;string s;
}edge[MAXN];
void addedge(int u,int v,string st){edge[++cnt].value=v;edge[cnt].next=head[u];edge[cnt].s=st;head[u]=cnt;
}
int fhas(int l,int r){return has[r]-has[l-1]*p[r-l+1];
}
void dfs(int x){for(int i=head[x];i;i=edge[i].next){int y=edge[i].value;string st=edge[i].s;for(int j=0;j<st.size();j++)has[len+j+1]=has[len+j]*base+st[j];for(int j=0;j<st.size();j++){if(len+j+1>=m){if(fhas(len+j-m+2,len+j+1)==hs)ans++;}}len+=st.size();dfs(y);len-=st.size();}
}
signed main(){p[0]=1;for(int i=1;i<=MAXN-5;i++)p[i]=p[i-1]*base;scanf("%lld",&n);for(int i=2;i<=n;i++){int x;string st;cin>>x>>st;addedge(x,i,st);}cin>>t;m=t.size();for(int i=1;i<=m;i++){has[i]=has[i-1]*base+t[i-1];}hs=has[m];dfs(1);printf("%lld\n",ans);return 0;
}

AC 记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/953839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java操作sip

1|0一、基础理论介绍 1|11.1 sip的主要功能 SIP的主要功能是允许用户或设备通过消息传递来产生互动,这些消息可以满足以下四种目的:用户向系统注册; 邀请用户参加互动会议; 协商会议媒体内容的格式; 建立两端点或…

CH59X/CH58X蓝牙主机设置白名单

可以通过白名单只扫描、连接特定的蓝牙设备(白名单中列出的)。 一、首先将白名单使能,通过宏开启// TRUE to use white list during discovery #define DEFAULT_DISCOVERY_WHITE_LIST 1//FALSE// TRUE to us…

题解:CF712D Memory and Scores

题意 有两个整数 \(a,b\),进行 \(t\) 轮操作,每轮操作先在 \([-k,k]\) 范围内取一个整数加到 \(a\) 中,再在 \([-k,k]\) 范围内取一个整数加到 \(b\) 中,求最终使 \(a > b\) 的方案数。 思路 记 \(a\) 增加的总…

思维的断章,觉知的永恒:一个基于“内观照叙事模型”的认知革命与跨学科范式重构

思维的断章,觉知的永恒:一个基于“内观照叙事模型”的认知革命与跨学科范式重构 笔者:岐金兰 日期:2025年11月2日 摘要 本文基于《一个灵感:思维的断章——内观照中的叙事》所提出的“觉知背景场思维模型”,进行…

拾壹月贰

csp 总结 发现解压密码是滕王阁序? 有点进步但没啥用(没体现在分数上,进步太小) \(T1\) 想到反悔贪心但是思路过于复杂,维护的东西太多,下次对于这种第一题(绿),可以慢点想想有没有简化的思路, 故赛时写了 \…

struct page

/** 系统中的每一个物理页(physical page)都对应一个 struct page 结构,* 用于追踪该页当前的用途。注意,我们无法追踪哪些任务(task)* 正在使用这个页;但如果该页是一个 pagecache 页面,* 我们可以通过 rmap(…

NFS 服务端/客户端配置

下面为你介绍基于CentOS7的NFS服务端和客户端的配置方法。 NFS服务端配置安装NFS服务相关软件包yum install -y nfs-utils rpcbind 启动并设置开机自启服务systemctl start rpcbind systemctl start nfs-server system…

CSP-S2025 题目解析

看了我的游记的都知道我每道题目的做题情况。 T1 比较简单的签到题目。 你先贪心选每个数最大的那个组,然后判断有没有某一个组的大于 \(\frac{n}{2}\),显然这种组有且仅有一个。 我们考虑把这个组的某些数换组,那么…

[Record] CSP-S 2025 邮寄

也不算特别寄,但是出考场之后 \(\texttt{T3}\) \(\texttt{T4}\) 都胡出来了,就很难绷。\(\texttt{T1}\) 水题,读完题写写就过了。 \(\texttt{T2}\) 胡思乱想了一会,然而并没有想到比 \(O(m\log m+nk2^k\alpha(n))\…

CH59x/CH58X蓝牙从机白名单使用

蓝牙从机设置白名单,可以只扫描应答(白名单中列出的)设备,只允许(白名单中列出的)设备连接。 蓝牙主机设置白名单,可以只扫描、连接特定的蓝牙设备(白名单中列出的)。 一.蓝牙从机白名单设置有关的函数介绍:…

算法实践第二次作业

一、找第 k 小的数的分治算法描述(伪代码 + 自然语言) 伪代码 plaintext function findKthSmallest(arr, low, high, k): if low == high: # 子数组仅1个元素,直接返回 return arr[low] # 步骤1:选基准元素(此处…

CSP2025总结

J组: 应该是最有机会 AK 的一次。 T1,T2 都是一眼题,用 30min 简单写完后看 T3

hello!

第一篇!第一篇博客园博客! 之前用Astro搭建了个人博客,但是没有评论区的反馈确实博客就像写学习笔记一样,中间出现了很多错误也没人说。。所以来博客园了! 希望这里能见证自己剩下两年半xcpc的学习时光o( ̄▽ ̄)ブ…

docker 交付方案AI设计备份

基于当前项目结构,Docker 交付和在线升级计划如下: Docker 交付与在线升级方案 一、总体架构设计 1.1 容器化策略应用镜像:为 FastAPI 主应用构建独立 Docker 镜像服务编排:使用 Docker Compose 编排所有服务数据持…

2025 CSP-S 游记

Day 0: 大巴上基本啥也没干,发会呆,看会b站就到了。 带了笔记本,晚上CS启动!打了两把小镇一把没赢。/ll 22:30算早睡吗。 Day 1: 上午6:14突然醒了,上了个厕所又睡下去了,7:30再次醒来,感觉睡得比去年好。 因为…

[题解]CSP-S 2025 T1~T3 题解

T1. P14361 [CSP-S 2025] 社团招新 / club Tag:贪心、排序。 因为要求每个社团不超过 \(\dfrac{n}{2}\) 个人,所以无论怎么分配,最多只会有一个社团超出限制。 因此,我们先让每个人选最满意的社团。若存在超出限制…

关于git关联github问题

本地GIT绑定GITHUB 配置本地GIT信息 #配置用户名 git config --global user.name "test"#配置邮箱 git config --global user.email abc@163.com生成本地密钥和公钥 生成ssh文件夹(生成ssh秘钥)(输入$ s…

AT ABC285E Work or Rest 题解

SolutionLink 有趣的 DP 题,难点在于从哪里开始入手以及优化(也许)。 显然 DP 可以方便地处理这个 \(\max\) 值的转移,但是从哪个位置开始 DP 呢?注意到周期呈现环状,也就是说一周的第 \(n\) 天和下一周的第 \(1…

代码复杂度的代价远比你想象得大

引言:复杂度的代价远比你想象得大 在 Java 后端系统演进过程中,代码复杂度是影响可维护性、稳定性和迭代效率的核心因素。然而,复杂度往往被忽视,直到一次“小改动”引发线上事故,才被重新审视。 本文以“复杂度战…

CSP2025 - S 年度总结大会报告

各大 oj 估分:洛谷:\(100+52+10+8=170\)。 小图灵:\(100+60+?+8=168+?\),当时他 \(T_3\) 数据还没有造。 梦熊:\(100+92+30+8=230\),感觉不准。自己估分:\(100+[48,70]+[0,40]+8=[156,218]\)。 第一:明确自己…