BZOJ4477 JSOI2015字符串树(可持久化trie)
树上建可持久化trie即可,有点过于裸了。darkbzoj过了然而在bzoj一直wa,不知道哪有锅。
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<cstdlib>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- int read()
- {
- int x=,f=;char c=getchar();
- while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
- while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
- return x*f;
- }
- #define N 100010
- int n,m,p[N],fa[N][],deep[N],root[N],t,cnt;
- struct data{int to,nxt;char s[];
- }edge[N<<];
- struct data2{int x,ch[];
- }tree[N*];
- void addedge(int x,int y,char *s){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;memcpy(edge[t].s,s,sizeof(s));}
- void ins(int &k,int p,char *s,int n)
- {
- tree[++cnt]=tree[k],k=cnt;tree[k].x++;
- if (p==n) return;
- ins(tree[k].ch[s[p+]-'a'],p+,s,n);
- }
- int query(int k,int p,char *s,int n)
- {
- if (!k) return ;
- if (p==n) return tree[k].x;
- return query(tree[k].ch[s[p+]-'a'],p+,s,n);
- }
- void dfs(int k)
- {
- for (int i=p[k];i;i=edge[i].nxt)
- if (edge[i].to!=fa[k][])
- {
- fa[edge[i].to][]=k;
- deep[edge[i].to]=deep[k]+;
- root[edge[i].to]=root[k];
- ins(root[edge[i].to],,edge[i].s,strlen(edge[i].s+));
- dfs(edge[i].to);
- }
- }
- int lca(int x,int y)
- {
- if (deep[x]<deep[y]) swap(x,y);
- for (int j=;~j;j--) if (deep[fa[x][j]]>=deep[y]) x=fa[x][j];
- if (x==y) return x;
- for (int j=;~j;j--) if (fa[x][j]!=fa[y][j]) x=fa[x][j],y=fa[y][j];
- return fa[x][];
- }
- int main()
- {
- #ifndef ONLINE_JUDGE
- freopen("bzoj4477.in","r",stdin);
- freopen("bzoj4477.out","w",stdout);
- const char LL[]="%I64d\n";
- #else
- const char LL[]="%lld\n";
- #endif
- n=read();
- for (int i=;i<n;i++)
- {
- int x=read(),y=read();
- char s[];scanf("%s",s+);
- addedge(x,y,s);
- }
- dfs();
- fa[][]=;
- for (int j=;j<;j++)
- for (int i=;i<=n;i++)
- fa[i][j]=fa[fa[i][j-]][j-];
- m=read();
- while (m--)
- {
- int x=read(),y=read();
- char s[];scanf("%s",s+);
- printf("%d\n",query(root[x],,s,strlen(s+))+query(root[y],,s,strlen(s+))-(query(root[lca(x,y)],,s,strlen(s+))<<));
- }
- return ;
- }
BZOJ4477 JSOI2015字符串树(可持久化trie)的更多相关文章
- BZOJ4477[Jsoi2015]字符串树——可持久化trie树
题目描述 萌萌买了一颗字符串树的种子,春天种下去以后夏天就能长出一棵很大的字符串树.字符串树很奇特,树枝上都密密麻麻写满了字符串,看上去很复杂的样子.[问题描述]字符串树本质上还是一棵树,即N个节点N ...
- [bzoj4477 Jsoi2015]字符串树 (可持久化trie)
传送门 Solution 复习下tire( ̄▽ ̄)/ 裸的可持久化tire,我用树剖求了下LCA Code #include <cstdio> #include <cstring&g ...
- luogu P6088 [JSOI2015]字符串树 可持久化trie 线段树合并 树链剖分 trie树
LINK:字符串树 先说比较简单的正解.由于我没有从最简单的考虑答案的角度思考 所以... 下次还需要把所有角度都考察到. 求x~y的答案 考虑 求x~根+y~根-2*lca~根的答案. 那么问题变成 ...
- BZOJ 4477: [Jsoi2015]字符串树 可持久化trie树
这个是真——可持久化字典树..... code: #include <bits/stdc++.h> #define N 100006 #define setIO(s) freopen(s& ...
- BZOJ4477: [Jsoi2015]字符串树
[传送门:BZOJ4477] 简要题意: 给出一棵n个点的树,树上的边都代表一个字符串,给出Q个询问,每个询问输入x,y和字符串s,求出x到y的路径上以s为前缀的字符串个数 题解: 自己yy了一波可持 ...
- 【BZOJ4477】[JSOI2015]字符串树(Trie树)
[BZOJ4477][JSOI2015]字符串树(Trie树) 题面 BZOJ 题解 对于每个点维护其到根节点的所有字符串构成的\(Trie\),显然可持久化一下就很好写了. 然后每次询问就是\(u+ ...
- 4.24 省选模拟赛 欧珀瑞特 主席树 可持久化trie树
很容易的一道题目.大概.不过我空间计算失误MLE了 我草草的计算了一下没想到GG了. 关键的是 我学了一个dalao的空间回收的方法 但是弄巧成拙了. 题目没有明确指出 在任意时刻数组长度为有限制什么 ...
- 【BZOJ-4212】神牛的养成计划 Trie树 + 可持久化Trie树
4212: 神牛的养成计划 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 136 Solved: 27[Submit][Status][Discus ...
- 【BZOJ4212】神牛的养成计划 Trie树+可持久化Trie树
[BZOJ4212]神牛的养成计划 Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望...... 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变 ...
随机推荐
- 实现高可用-Keepalived
简介 Keepalived是HA Cluster(High Availability Cluster,高可用集群)的一个服务软件,用来防止单点故障. Keepalived采用VRRP(virtual ...
- Tools - GitBook
GitBook图书绑定自定义的域名 https://jingyan.baidu.com/article/335530daf86c3b19cb41c3f3.html
- vue渲染自定义json数据
<template> <div class="wrap"> <div class="main"> <div class ...
- ubuntu如何设置Python的版本
Ubuntu默认已经安装了Python的版本了,不过是Python2的版本. 我们安装好Python3想把他切换为系统默认的版本. sudo update-alternatives --config ...
- laravel 增删改查 数据库设置 路由设置
laravel 框架的路由设置: url: http://www.shanzezhao.com/laraverl/my_laravel/public/index.php/indexs laravel ...
- hadoop生态搭建(3节点)-01.基础配置
# 基础配置# ==================================================================node1 vi /etc/hostname nod ...
- 20190105-打印字母C,H,N,口等图像和杨辉三角
1. 打印字母C ****** * * * * ****** def print_c(n): print('*' * n) for i in range(n): print('* ') print(' ...
- Python学习手册之控制结构(二)
在上一篇文章中,我们介绍了Python的一些控制结构,现在我们继续介绍剩下的 Python 控制结构.查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9972 ...
- RedHat7.1 安装Oracle12102
选型: 32位的内存是个瓶颈,已经是64位的时代了.使用64位的CentOS6 和 64位的Oracle 11g R2 在虚拟机器安装,采用hostonly方式设置网络 注意:能上网的网卡要设置一下I ...
- 2844: albus就是要第一个出场
2844: albus就是要第一个出场 链接 分析: 和HDU3949差不多互逆,这里需要加上相同的数. 结论:所有数任意异或,构成的数出现一样的次数,次数为$2^{n-cnt}$,cnt为线性基的大 ...