Codeforces Round #333 (Div. 1) D. Acyclic Organic Compounds trie树合并
You are given a tree T with n vertices (numbered 1 through n) and a letter in each vertex. The tree is rooted at vertex 1.
Let's look at the subtree Tv of some vertex v. It is possible to read a string along each simple path starting at v and ending at some vertex in Tv (possibly v itself). Let's denote the number of distinct strings which can be read this way as
.
Also, there's a number cv assigned to each vertex v. We are interested in vertices with the maximum value of
.
You should compute two statistics: the maximum value of
and the number of vertices v with the maximum
.
The first line of the input contains one integer n (1 ≤ n ≤ 300 000) — the number of vertices of the tree.
The second line contains n space-separated integers ci (0 ≤ ci ≤ 109).
The third line contains a string s consisting of n lowercase English letters — the i-th character of this string is the letter in vertex i.
The following n - 1 lines describe the tree T. Each of them contains two space-separated integers u and v (1 ≤ u, v ≤ n) indicating an edge between vertices u and v.
It's guaranteed that the input will describe a tree.
Print two lines.
On the first line, print
over all 1 ≤ i ≤ n.
On the second line, print the number of vertices v for which
.
10
1 2 7 20 20 30 40 50 50 50
cacabbcddd
1 2
6 8
7 2
6 2
5 4
5 9
3 10
2 5
2 3
51
3
In the first sample, the tree looks like this:

The sets of strings that can be read from individual vertices are:

Finally, the values of
are:

In the second sample, the values of
are (5, 4, 2, 1, 1, 1). The distinct strings read in T2 are
; note that
can be read down to vertices 3 or 4.
trie树合并
比较考验代码能力
显然我就比较low
这份代码是cf抠来的
#include<iostream>
#include<vector>
#include<cassert>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std; const int N = + ;
const int V = N * ; int n, tot;
int ch[V][], size[V];
int c[N];
int father[N];
vector<int> adj[N];
char label[N]; int merge(int u, int v)
{
if (u < ) return v;
if (v < ) return u;
int t = tot ++;
size[t] = ;
for(int c = ; c < ; ++ c) {
ch[t][c] = merge(ch[u][c], ch[v][c]);
if (ch[t][c] >= ) {
size[t] += size[ch[t][c]];
}
}
return t;
} void dfs(int u)
{
for(int c = ; c < ; ++ c) {
ch[u][c] = -;
}
for(int e = ; e < adj[u].size(); ++e) {
int v = adj[u][e];
if (v == father[u]) continue;
father[v] = u;
dfs(v);
int lab = label[v] - 'a';
ch[u][lab] = merge(ch[u][lab], v);
}
size[u] = ;
for(int x = ; x < ; ++ x) {
if (ch[u][x] >= ) {
size[u] += size[ch[u][x]];
}
}
c[u] += size[u];
} void solve()
{
cin >> n;
for(int i = ; i < n; ++ i) {
scanf("%d", c + i);
}
scanf("%s", label);
for(int i = ; i < n - ; ++ i) {
int u, v;
scanf("%d%d", &u, &v);
--u, --v;
adj[u].push_back(v);
adj[v].push_back(u);
}
father[] = -;
tot = n;
dfs();
int ret = *max_element(c, c + n);
int cnt = ;
for(int i = ; i < n; ++ i) {
if (c[i] == ret) ++ cnt;
}
cout << ret << ' ' << cnt << endl;
} int main()
{
solve();
return ;
}
Codeforces Round #333 (Div. 1) D. Acyclic Organic Compounds trie树合并的更多相关文章
- Codeforces Round #333 (Div. 1) C. Kleofáš and the n-thlon 树状数组优化dp
C. Kleofáš and the n-thlon Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset trie树
D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input standa ...
- Codeforces Round #292 (Div. 1) C. Drazil and Park 线段树
C. Drazil and Park 题目连接: http://codeforces.com/contest/516/problem/C Description Drazil is a monkey. ...
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset Trie
题目链接: http://codeforces.com/contest/706/problem/D D. Vasiliy's Multiset time limit per test:4 second ...
- Codeforces Round #333 (Div. 1) B. Lipshitz Sequence 倍增 二分
B. Lipshitz Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/601/ ...
- Codeforces Round #333 (Div. 2) C. The Two Routes flyod
C. The Two Routes Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/602/pro ...
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range st 二分
B. Approximating a Constant Range Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com ...
- Codeforces Round #333 (Div. 2) A. Two Bases 水题
A. Two Bases Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/602/problem/ ...
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range
B. Approximating a Constant Range Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com ...
随机推荐
- 【转】关于Class.getResource和ClassLoader.getResource的路径问题
Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...
- zju3545
AC自动机+状态压缩DP 注意:相同的串可能出现多次,如果匹配成功则将各次权值加和. #include <cstdio> #include <queue> #include & ...
- ios 转发一篇对于6 plus的分辨率模式的说明
http://segmentfault.com/q/1010000002545515 分为兼容模式和高分辨率模式. 兼容模式 当你的 app 没有提供 3x 的 LaunchImage 时,系统默认进 ...
- ACM/ICPC 之 BFS-广搜+队列入门-抓牛(POJ3278)
这一题是练习广度优先搜索很好的例题,在很多广搜教学中经常用到,放在这里供学习搜索算法的孩纸们看看= = 题目大意:一维数轴上,农夫在N点,牛在K点,假定牛不会移动,农夫要找到这头牛只能够进行以下三种移 ...
- Metro各种流转换
Ibuffer转byte[] ,(int)buffer.Length); Byte[]转Ibuffer WindowsRuntimeBufferExtensions.AsBuffer(bytes,,b ...
- iOS基础框架的搭建/国际化操作
1.基础框架的搭建 1.1 pod引入常用的第三方类库 1.2 创建基础文件夹结构/目录结构 Resource———存放声音/图片/xib/storyboard 等资源文件 Define——宏定义, ...
- tp5文件上传
//tp5上传文件先 use think\File; //上传文件处理 $file = request()->file('file'); // 获取表单提交过来的文件 $error = $_FI ...
- 【python】入门学习(一)
主要记录一下与C语言不同的地方和特别需要注意的地方: // 整除 ** 乘方 整数没有长度限制,浮点数有长度限制 复数: >>> 1j*1j (-1+0j) 导入模块: import ...
- 【XLL API 函数】xlCoerce
将 XLOPER/XLOPER12 转换为另一种类型,或是查询表格中的单元格值. 函数原型 Excel12(xlCoerce, LPXLOPER12 pxRes, 2, LPXLOPER12 pxSo ...
- os.walk()
os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下. walk()方法语法格式如下: os.walk(top[, topdown=True[, onerror=None[ ...