BZOJ4477: [Jsoi2015]字符串树
【传送门:BZOJ4477】
简要题意:
给出一棵n个点的树,树上的边都代表一个字符串,给出Q个询问,每个询问输入x,y和字符串s,求出x到y的路径上以s为前缀的字符串个数
题解:
自己yy了一波可持久化字典树
将每条边的字符串放到深度更深的节点保存
对于x到y的路径,将rt[x]+rt[y]-2*rt[lca]就可以了,因为我们不需要lca到它父亲的字符串
本机RE,提交AC。。。怕是机子出毛病了
参考代码:
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
struct trie
{
int son[],c;
trie()
{
c=;
memset(son,,sizeof(son));
}
}tr[];int trlen;
int rt[];
struct node
{
int x,y,next;
}a[];int len,last[];
void ins(int x,int y)
{
len++;
a[len].x=x;a[len].y=y;
a[len].next=last[x];last[x]=len;
}
char st[];
int slen;
void Link(int &u1,int d)
{
if(u1==) u1=++trlen;
tr[u1].c=;
if(d==slen) return ;
d++;
int y=st[d]-'a'+;
Link(tr[u1].son[y],d);
}
void Merge(int &u1,int u2)
{
if(u1==){u1=u2;return ;}
if(u2==) return ;
tr[u1].c+=tr[u2].c;
for(int i=;i<=;i++) Merge(tr[u1].son[i],tr[u2].son[i]);
}
int f[][],bin[],dep[];
void dfs(int x)
{
for(int i=;bin[i]<=dep[x];i++) f[x][i]=f[f[x][i-]][i-];
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(y!=f[x][])
{
f[y][]=x;
dep[y]=dep[x]+;
Merge(rt[y],rt[x]);
dfs(y);
}
}
}
int LCA(int x,int y)
{
if(dep[x]<dep[y]) swap(x,y);
for(int i=;i>=;i--)
{
if(dep[x]-dep[y]>=bin[i])
{
x=f[x][i];
}
}
if(x==y) return x;
for(int i=;i>=;i--)
{
if(dep[x]>=bin[i]&&f[x][i]!=f[y][i])
{
x=f[x][i];y=f[y][i];
}
}
return f[x][];
}
char s[];int clen;
int findc(int u1,int u2,int u3,int d)
{
int c=tr[u1].c+tr[u2].c-*tr[u3].c;
if(c==) return ;
if(d==clen) return c;
d++;
int y=s[d]-'a'+;
return findc(tr[u1].son[y],tr[u2].son[y],tr[u3].son[y],d);
}
int main()
{
bin[]=;for(int i=;i<=;i++) bin[i]=bin[i-]<<;
int n;
scanf("%d",&n);
len=;memset(last,,sizeof(last));
trlen=;memset(rt,,sizeof(rt));
for(int i=;i<n;i++)
{
int x,y;
scanf("%d%d%s",&x,&y,st+);slen=strlen(st+);
ins(x,y);
Link(rt[y],);
}
f[][]=;dep[]=;dfs();
int Q;
scanf("%d",&Q);
for(int i=;i<=Q;i++)
{
int x,y;
scanf("%d%d%s",&x,&y,s+);
clen=strlen(s+);
int lca=LCA(x,y);
printf("%d\n",findc(rt[x],rt[y],rt[lca],));
}
return ;
}
BZOJ4477: [Jsoi2015]字符串树的更多相关文章
- BZOJ4477[Jsoi2015]字符串树——可持久化trie树
题目描述 萌萌买了一颗字符串树的种子,春天种下去以后夏天就能长出一棵很大的字符串树.字符串树很奇特,树枝上都密密麻麻写满了字符串,看上去很复杂的样子.[问题描述]字符串树本质上还是一棵树,即N个节点N ...
- BZOJ4477 JSOI2015字符串树(可持久化trie)
树上建可持久化trie即可,有点过于裸了.darkbzoj过了然而在bzoj一直wa,不知道哪有锅. #include<iostream> #include<cstdio> # ...
- [bzoj4477 Jsoi2015]字符串树 (可持久化trie)
传送门 Solution 复习下tire( ̄▽ ̄)/ 裸的可持久化tire,我用树剖求了下LCA Code #include <cstdio> #include <cstring&g ...
- 【BZOJ4477】[JSOI2015]字符串树(Trie树)
[BZOJ4477][JSOI2015]字符串树(Trie树) 题面 BZOJ 题解 对于每个点维护其到根节点的所有字符串构成的\(Trie\),显然可持久化一下就很好写了. 然后每次询问就是\(u+ ...
- [Jsoi2015]字符串树
https://www.zybuluo.com/ysner/note/1298148 题面 字符串树本质上还是一棵树,即\(N\)个节点\(N-1\)条边的连通无向无环图,节点 从\(1\)到\(N\ ...
- luogu P6088 [JSOI2015]字符串树 可持久化trie 线段树合并 树链剖分 trie树
LINK:字符串树 先说比较简单的正解.由于我没有从最简单的考虑答案的角度思考 所以... 下次还需要把所有角度都考察到. 求x~y的答案 考虑 求x~根+y~根-2*lca~根的答案. 那么问题变成 ...
- 【BZOJ4477】字符串树(可持久化Trie)
此题花费我整整三天的功夫.还在NoiP贴吧发过贴. 最后发现trie树建新节点时信息未完全复制,真是愚蠢之极. 言归正传. 如果我们已经知道了每个点上的trie树那么询问就是sum[x]+sum[y] ...
- BZOJ 4477: [Jsoi2015]字符串树 可持久化trie树
这个是真——可持久化字典树..... code: #include <bits/stdc++.h> #define N 100006 #define setIO(s) freopen(s& ...
- 「JSOI2015」字符串树
「JSOI2015」字符串树 传送门 显然可以树上差分. 我们对于树上每一条从根出发的路径都开一 棵 \(\text{Trie}\) 树,那么我们就只需要在 \(\text{Trie}\) 树中插入一 ...
随机推荐
- C/s模式与B/S模式
C/S模式事是client/server,即客服端/服务模式
- C#-C#6.0新特性
来自为知笔记(Wiz)
- 数据库联表统计查询 Group by & INNER JOIN
原数据表 视频信息表 tab_video_info 播放记录表 tab_play_record 需求 统计播放量(已经开始播放)最多的前20个视频: SELECT a.video_id, SUM( ...
- HDU 1211
水.模拟即可.使用EXGCD求逆元 #include <iostream> #include <cstdio> #include <cstring> #includ ...
- 哈理工2015暑假训练赛 zoj 2078Phone Cell
Phone CellTime Limit:10000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu SubmitStatus ...
- 測试jbpm6.2使用的基础类
方便了解jbpm6.2功能我们能够建立一个測试项目,在当中构建一个測试基础类,详细过程例如以下所看到的. 在集成了插件org.drools.updatesite-6.2.0.Final.zip的ecl ...
- 14.MongoDBUtils工具类
1. public class DbUtils { public static MongoCollection<Document> getMongoCollection(String lo ...
- xBIM 基础08 WeXplorer 简介
系列目录 [已更新最新开发文章,点击查看详细] 一.WeXplorer 简介 WeXplorer 是 XBIM 工具包的可视化部分,它使用预处理的 WexBIM 文件在 Web 上处理 IFC ...
- Elasticsearch开发环境搭建(Eclipse\MyEclipse + Maven)
前提是, Elasticsearch 编程API入门系列---说在前面的话 Eclipse下Maven新建项目.自动打依赖jar包(包含普通项目和Web项目) setting.xml配置文件 如何在M ...
- iOS Device Types
ios 设备硬件名称对照表 https://support.hockeyapp.net/kb/client-integration-ios-mac-os-x-tvos/ios-device-types ...