LibieOJ 6170 字母树 (Trie)
题目链接 字母树
(以每个点为根遍历,插入到trie中,统计答案即可)——SamZhang
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) typedef long long LL; const int N = 5010; struct node{
int son[26];
int cnt, tot;
int sum[27];
} trie[N]; int n, m, q; vector <int> v[N];
vector <char> ch[N]; int ans[N][N]; void build_trie(int x, int fa, int p){
++trie[p].cnt;
int i = -1;
for (auto u : v[x]){
++i;
if (u == fa) continue;
int c = ch[x][i] - 'a';
if (trie[p].son[c] == 0){
++m;
trie[p].son[c] = m;
} build_trie(u, x, trie[p].son[c]);
}
} void get_answer(int x, int fa, int p, int cnt, int ans[]){
ans[x] = cnt;
cnt += trie[p].cnt;
int i = -1;
for (auto u : v[x]){
++i;
if (u == fa) continue;
int c = ch[x][i] - 'a';
get_answer(u, x, trie[p].son[c], cnt + trie[p].sum[c], ans);
}
} int main(){ scanf("%d%d", &n, &q);
rep(i, 1, n - 1){
int x, y;
char z[10];
scanf("%d%d%s", &x, &y, z);
v[x].push_back(y);
v[y].push_back(x);
ch[x].push_back(z[0]);
ch[y].push_back(z[0]);
} rep(i, 1, n){
m = 0;
memset(trie, 0, sizeof trie);
build_trie(i, 0, 0);
dec(j, m, 0){
trie[j].tot = trie[j].cnt;
rep(k, 0, 25){
trie[j].sum[k + 1] = trie[j].sum[k];
if (trie[j].son[k] > 0){
trie[j].tot += trie[trie[j].son[k]].tot;
trie[j].sum[k + 1] += trie[trie[j].son[k]].tot;
}
} rep(k, 1, 25){
trie[trie[j].son[k - 1]].cnt;
} } get_answer(i, 0, 0, 0, ans[i]);
} while (q--){
int x, y;
scanf("%d%d", &x, &y);
printf("%d\n", ans[x][y] - 1);
} return 0;
}
LibieOJ 6170 字母树 (Trie)的更多相关文章
- Atitit 常见的树形结构 红黑树 二叉树 B树 B+树 Trie树 attilax理解与总结
Atitit 常见的树形结构 红黑树 二叉树 B树 B+树 Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 ...
- 字典树(Trie Tree)
在图示中,键标注在节点中,值标注在节点之下.每一个完整的英文单词对应一个特定的整数.Trie 可以看作是一个确定有限状态自动机,尽管边上的符号一般是隐含在分支的顺序中的.键不需要被显式地保存在节点中. ...
- 字典树(Trie树)的实现及应用
>>字典树的概念 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树.与二叉查找树不同,Trie树的 ...
- [转载]字典树(trie树)、后缀树
(1)字典树(Trie树) Trie是个简单但实用的数据结构,通常用于实现字典查询.我们做即时响应用户输入的AJAX搜索框时,就是Trie开始.本质上,Trie是一颗存储多个字符串的树.相邻节点间的边 ...
- [POJ] #1002# 487-3279 : 桶排序/字典树(Trie树)/快速排序
一. 题目 487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 274040 Accepted: 48891 ...
- 『字典树 trie』
字典树 (trie) 字典树,又名\(trie\)树,是一种用于实现字符串快速检索的树形数据结构.核心思想为利用若干字符串的公共前缀来节约储存空间以及实现快速检索. \(trie\)树可以在\(O(( ...
- UVa 11732 "strcmp()" Anyone? (左儿子右兄弟前缀树Trie)
题意:给定strcmp函数,输入n个字符串,让你用给定的strcmp函数判断字符比较了多少次. 析:题意不理解的可以阅读原题https://uva.onlinejudge.org/index.php? ...
- K:单词查找树(Trie)
单词查找树,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串.Trie可以看作是一个确定有限状态自动机(DFA).与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中 ...
- 字典树 trie
Trie树 Trie树,就是字母树.Trie树是多叉树,每个节点为一个字母.其根节点为象征节点(就是说没有含义,但是存在这个节点),从根节点开始建立,每个节点至多为26个子节点(不要我说 ...
随机推荐
- k短路模板
https://acm.taifua.com/archives/jsk31445.html 链接: https://nanti.jisuanke.com/t/31445 #include <io ...
- POJ:3020-Antenna Placement(二分图的最小路径覆盖)
原题传送:http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Descri ...
- cyg-apt update 升级报错
现象: $ cyg-apt updatecyg-apt: downloading: http://box-soft.com/setup-2.bz2cyg-apt: downloading: http: ...
- vmware esxi 6.0 开启嵌套虚拟化
环境描述: 已通过vSphere Client创建一个名字为centos7的虚拟机,现在需要打开该虚拟机的嵌套虚拟化功能. 第一步: 开启ESXi Shell 开启vSphere的ssh远程登录服务或 ...
- 浅谈CSS中的百分比
结论: 标准流中的元素,看其属性有没有继承性.对于width和margin-left,它是可以继承的,它会参照父元素或者祖先元素(其实是包含块):对于height,它没有继承性,父元素或者祖先元素会自 ...
- wordpress 获取站点的所有链接
<?php include "wp-load.php"; $posts = new WP_Query('post_type=any&posts_per_page=-1 ...
- 第4章--变量,作用域和内存问题 jquery
4.1基本类型和引用类型的值 解析器要分析赋给变量的值是基本类型值还是引用类型的值 基本类型:undefined null boolean number string 引用类型的值: ...
- Emacs 安装与体验
Emacs 安装与体验 下载与安装 首先是下载最新的x64版本的Emacs. 将下载下来的文件解压到你喜欢的磁盘目录下,我选择的是C:\Program Files.放在D盘可能是更好的选择,因 ...
- AtCoder Beginner Contest 070
我好想有点思维江化,所以我想给这个丝毫没有问题的abc也写下 A - Palindromic Number Time Limit: 2 sec / Memory Limit: 256 MB Score ...
- Dropbox面向第三方开发者推出全新的Datastore API
Dropbox今天推出了全新的高级的同步API,开发者可以使用Dropbox的技术同步跨设备app的数据. Datastore API在现有的Dropbox Sync API基础上进行了扩展,允许开发 ...