bzoj 4477: [Jsoi2015]字符串树
来源:互联网 发布:数据库的基本特点是 编辑:程序博客网 时间:2024/05/22 04:27
题意:
给一颗边上有字符串的树。求U,V节点U和节点V之间的路径上有多少字符串以S为前缀。
题解:
挺无脑的一道题。虽然想了一会
直接就按跟到节点的路径建可持久化trie就没了。
code:
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>using namespace std;struct node{ int x,y,next; char s[12];}a[200010];int len,last[100010];struct trnode{ int a[26],c;}tr[1000005];int tot=0,root[100010];int fa[100010][20],dep[100010];int n,m;void ins(int x,int y,char *s){ a[++len].y=y;strcpy(a[len].s,s); a[len].next=last[x];last[x]=len;}int solve(int x,int y){ if(dep[x]<dep[y]) swap(x,y); for(int i=17;i>=0;i--) if((1<<i)<=dep[x]-dep[y]) x=fa[x][i]; if(x==y) return x; for(int i=17;i>=0;i--) if((1<<i)<=dep[x]&&fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i]; return fa[x][0];}void insert(int &x,int froot,int i,int len,char *s){ x=++tot;tr[x]=tr[froot]; tr[x].c++; if(i==len) return; int c=s[i]-'a'; insert(tr[x].a[c],tr[froot].a[c],i+1,len,s);}void dfs(int x,int f){ dep[x]=dep[f]+1;fa[x][0]=f; for(int i=1;(1<<i)<=dep[x];i++) fa[x][i]=fa[fa[x][i-1]][i-1]; for(int i=last[x];i;i=a[i].next) { int y=a[i].y; if(y==f) continue; insert(root[y],root[x],0,strlen(a[i].s),a[i].s); dfs(y,x); }}char s[15];int get(int x,int i,int len,char *s){ if(!x) return 0; if(i==len) return tr[x].c; int c=s[i]-'a'; return get(tr[x].a[c],i+1,len,s);}int main(){ scanf("%d",&n); for(int i=1;i<n;i++) { int x,y;char s[12]; scanf("%d %d %s",&x,&y,s); ins(x,y,s);ins(y,x,s); } dep[0]=-1;dfs(1,0); scanf("%d",&m); while(m--) { int x,y;scanf("%d %d",&x,&y); int lca=solve(x,y); scanf("%s",s); printf("%d\n",get(root[x],0,strlen(s),s)+get(root[y],0,strlen(s),s)-2*get(root[lca],0,strlen(s),s)); }}
阅读全文
1 0
- bzoj 4477: [Jsoi2015]字符串树
- bzoj 4477: [Jsoi2015]字符串树
- bzoj 4477: [Jsoi2015]字符串树
- bzoj 4477: [Jsoi2015]字符串树 可持久化线段树
- [BZOJ]4477: [Jsoi2015]字符串树 可持久化trie
- [JSOI2015][JZOJ4061]字符串树
- 【JSOI2015】字符串树
- 【JZOJ4061】【JSOI2015】字符串树
- 【JSOI2015】字符串树
- 【JSOI2015】字符串树
- JZOJ 4061. 【JSOI2015】字符串树
- bzoj 4472: [Jsoi2015]salesman
- bzoj 4474: [Jsoi2015]isomorphism
- bzoj 4488: [Jsoi2015]最大公约数
- BZOJ 4481 [Jsoi2015] 非诚勿扰
- bzoj 4481 [Jsoi2015]非诚勿扰
- bzoj 4488: [Jsoi2015]最大公约数
- bzoj 4475: [Jsoi2015]子集选取
- 性能优化(一)——开启慢查询
- 排序算法时间复杂度分析
- Windows/MFC_def文件格式_规范写法(用于生成dll)
- Python的运算符
- MFC对于Combo box控件GetWindowText获取控件值不正确
- bzoj 4477: [Jsoi2015]字符串树
- 【Leetcode-Easy-110】Balanced Binary Tree
- jquery添加的html元素按钮为什么不执行类样式绑定的click事件
- Netty中的Future源码解读
- [BZOJ]4477: [Jsoi2015]字符串树 可持久化trie
- Python(几个操作)
- 模拟电源 开关电源 数字电源
- 斜率DP优化
- VUE 和 setInterval 使用记录