树上建可持久化trie即可,有点过于裸了。darkbzoj过了然而在bzoj一直wa,不知道哪有锅。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. int read()
  9. {
  10. int x=,f=;char c=getchar();
  11. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  12. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  13. return x*f;
  14. }
  15. #define N 100010
  16. int n,m,p[N],fa[N][],deep[N],root[N],t,cnt;
  17. struct data{int to,nxt;char s[];
  18. }edge[N<<];
  19. struct data2{int x,ch[];
  20. }tree[N*];
  21. 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));}
  22. void ins(int &k,int p,char *s,int n)
  23. {
  24. tree[++cnt]=tree[k],k=cnt;tree[k].x++;
  25. if (p==n) return;
  26. ins(tree[k].ch[s[p+]-'a'],p+,s,n);
  27. }
  28. int query(int k,int p,char *s,int n)
  29. {
  30. if (!k) return ;
  31. if (p==n) return tree[k].x;
  32. return query(tree[k].ch[s[p+]-'a'],p+,s,n);
  33. }
  34. void dfs(int k)
  35. {
  36. for (int i=p[k];i;i=edge[i].nxt)
  37. if (edge[i].to!=fa[k][])
  38. {
  39. fa[edge[i].to][]=k;
  40. deep[edge[i].to]=deep[k]+;
  41. root[edge[i].to]=root[k];
  42. ins(root[edge[i].to],,edge[i].s,strlen(edge[i].s+));
  43. dfs(edge[i].to);
  44. }
  45. }
  46. int lca(int x,int y)
  47. {
  48. if (deep[x]<deep[y]) swap(x,y);
  49. for (int j=;~j;j--) if (deep[fa[x][j]]>=deep[y]) x=fa[x][j];
  50. if (x==y) return x;
  51. for (int j=;~j;j--) if (fa[x][j]!=fa[y][j]) x=fa[x][j],y=fa[y][j];
  52. return fa[x][];
  53. }
  54. int main()
  55. {
  56. #ifndef ONLINE_JUDGE
  57. freopen("bzoj4477.in","r",stdin);
  58. freopen("bzoj4477.out","w",stdout);
  59. const char LL[]="%I64d\n";
  60. #else
  61. const char LL[]="%lld\n";
  62. #endif
  63. n=read();
  64. for (int i=;i<n;i++)
  65. {
  66. int x=read(),y=read();
  67. char s[];scanf("%s",s+);
  68. addedge(x,y,s);
  69. }
  70. dfs();
  71. fa[][]=;
  72. for (int j=;j<;j++)
  73. for (int i=;i<=n;i++)
  74. fa[i][j]=fa[fa[i][j-]][j-];
  75. m=read();
  76. while (m--)
  77. {
  78. int x=read(),y=read();
  79. char s[];scanf("%s",s+);
  80. printf("%d\n",query(root[x],,s,strlen(s+))+query(root[y],,s,strlen(s+))-(query(root[lca(x,y)],,s,strlen(s+))<<));
  81. }
  82. return ;
  83. }

BZOJ4477 JSOI2015字符串树(可持久化trie)的更多相关文章

  1. BZOJ4477[Jsoi2015]字符串树——可持久化trie树

    题目描述 萌萌买了一颗字符串树的种子,春天种下去以后夏天就能长出一棵很大的字符串树.字符串树很奇特,树枝上都密密麻麻写满了字符串,看上去很复杂的样子.[问题描述]字符串树本质上还是一棵树,即N个节点N ...

  2. [bzoj4477 Jsoi2015]字符串树 (可持久化trie)

    传送门 Solution 复习下tire( ̄▽ ̄)/ 裸的可持久化tire,我用树剖求了下LCA Code #include <cstdio> #include <cstring&g ...

  3. luogu P6088 [JSOI2015]字符串树 可持久化trie 线段树合并 树链剖分 trie树

    LINK:字符串树 先说比较简单的正解.由于我没有从最简单的考虑答案的角度思考 所以... 下次还需要把所有角度都考察到. 求x~y的答案 考虑 求x~根+y~根-2*lca~根的答案. 那么问题变成 ...

  4. BZOJ 4477: [Jsoi2015]字符串树 可持久化trie树

    这个是真——可持久化字典树..... code: #include <bits/stdc++.h> #define N 100006 #define setIO(s) freopen(s& ...

  5. BZOJ4477: [Jsoi2015]字符串树

    [传送门:BZOJ4477] 简要题意: 给出一棵n个点的树,树上的边都代表一个字符串,给出Q个询问,每个询问输入x,y和字符串s,求出x到y的路径上以s为前缀的字符串个数 题解: 自己yy了一波可持 ...

  6. 【BZOJ4477】[JSOI2015]字符串树(Trie树)

    [BZOJ4477][JSOI2015]字符串树(Trie树) 题面 BZOJ 题解 对于每个点维护其到根节点的所有字符串构成的\(Trie\),显然可持久化一下就很好写了. 然后每次询问就是\(u+ ...

  7. 4.24 省选模拟赛 欧珀瑞特 主席树 可持久化trie树

    很容易的一道题目.大概.不过我空间计算失误MLE了 我草草的计算了一下没想到GG了. 关键的是 我学了一个dalao的空间回收的方法 但是弄巧成拙了. 题目没有明确指出 在任意时刻数组长度为有限制什么 ...

  8. 【BZOJ-4212】神牛的养成计划 Trie树 + 可持久化Trie树

    4212: 神牛的养成计划 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 136  Solved: 27[Submit][Status][Discus ...

  9. 【BZOJ4212】神牛的养成计划 Trie树+可持久化Trie树

    [BZOJ4212]神牛的养成计划 Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望...... 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变 ...

随机推荐

  1. 实现高可用-Keepalived

    简介 Keepalived是HA Cluster(High Availability Cluster,高可用集群)的一个服务软件,用来防止单点故障. Keepalived采用VRRP(virtual ...

  2. Tools - GitBook

    GitBook图书绑定自定义的域名 https://jingyan.baidu.com/article/335530daf86c3b19cb41c3f3.html

  3. vue渲染自定义json数据

    <template> <div class="wrap"> <div class="main"> <div class ...

  4. ubuntu如何设置Python的版本

    Ubuntu默认已经安装了Python的版本了,不过是Python2的版本. 我们安装好Python3想把他切换为系统默认的版本. sudo update-alternatives --config ...

  5. laravel 增删改查 数据库设置 路由设置

    laravel 框架的路由设置: url: http://www.shanzezhao.com/laraverl/my_laravel/public/index.php/indexs laravel ...

  6. hadoop生态搭建(3节点)-01.基础配置

    # 基础配置# ==================================================================node1 vi /etc/hostname nod ...

  7. 20190105-打印字母C,H,N,口等图像和杨辉三角

    1. 打印字母C ****** * * * * ****** def print_c(n): print('*' * n) for i in range(n): print('* ') print(' ...

  8. Python学习手册之控制结构(二)

    在上一篇文章中,我们介绍了Python的一些控制结构,现在我们继续介绍剩下的 Python 控制结构.查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9972 ...

  9. RedHat7.1 安装Oracle12102

    选型: 32位的内存是个瓶颈,已经是64位的时代了.使用64位的CentOS6 和 64位的Oracle 11g R2 在虚拟机器安装,采用hostonly方式设置网络 注意:能上网的网卡要设置一下I ...

  10. 2844: albus就是要第一个出场

    2844: albus就是要第一个出场 链接 分析: 和HDU3949差不多互逆,这里需要加上相同的数. 结论:所有数任意异或,构成的数出现一样的次数,次数为$2^{n-cnt}$,cnt为线性基的大 ...