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个子节点(不要我说 ...
随机推荐
- python-matplotlib-lec0
直奔主题吧..以下是对matplotlib画图的简单讲解,代码已测试. win7 + pycharm + python 2.7 参考文档: http://old.sebug.net/paper/boo ...
- vijos--繁华的都市
描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路 ...
- Elasticsearch安装---安装jdk
1.在Linux 上检查Java版本是否满足要求: java -version 如果运行上面命令时报错:-bash: java: command not found,首先检查是否有jdk ,要是有安装 ...
- 加密javascript代码
最近看了个js日历,里面用到了加密,看了下,自己也模仿做加密,现在只能加密一般的javascript语句 <!DOCTYPE html> <html> <meta htt ...
- 记一次WMS的系统改造(2)-敲定方案
既定改造方案 基于上一篇分析出的种种问题,我们将库房人员的系统操作划分为两大类. 第一类为货物驱动的操作,这类操作主要随着货物而前进,人员不看或者看软件的次数比较少,更多是对货物的状态进行系统上的确认 ...
- mysql primary partition分区
尝试把数据库一个表分区 ALTER TABLE user PARTITION BY RANGE(TO_DAYS(`date`)) ( PARTITION p1004 VALUES LESS THAN ...
- linux随笔四
1.ps -ef : -e 显示系统上运行的所有进程,-f 显示一些有用的信息列 UID:负责启动进程的用户 PID:进程的ID PPID:父进程的PID(某个进程由另一个进程启动) C: ...
- JS使用onerror进行默认图像显示,可代替alt
JS代码 //图像加载出错时的处理 function errorImg(img) { img.src = "默认图片.jpg"; img.onerror = null; } HTM ...
- Leetcode 416.分割等和子集
分割等和子集 给定一个只包含正整数的非空数组.是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [ ...
- [uiautomator篇][exist 存在,但click错误]
uiautomator定位页面元素是,定位存在的;但是click的时候,发现点的位置不对,(不知道是android系统的问题还是uiautomator的问题,初步怀疑是系统的问题)