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
 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.
 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:
 are:

In the second sample, the values of  are (5, 4, 2, 1, 1, 1). The distinct strings read in T2 are
 are (5, 4, 2, 1, 1, 1). The distinct strings read in T2 are  ; note that
; note that  can be read down to vertices 3 or 4.
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 ... 
随机推荐
- STL 阅读(浅析)
			写的不错,决定那这个看下.看的还是晕. http://luohongcheng.github.io/archives/ 
- ACM/ICPC 之 "嵌套"队列 -插队(POJ2259)
			这里插队的意思就是排队时遇到熟人则插到其后,否则排到队尾.(这个习惯不太好)(题意) 题目要求我们模拟“插队模型”和队列的入队和出队完成此算法. 由于题目的输入输出很多,此题的查找操作(找到熟人)需要 ... 
- windows服务
			.net windows 服务创建.安装.卸载和调试 原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html 我对例子做了 ... 
- 【leetcode】Single Number II (medium) ★  自己没做出来....
			Given an array of integers, every element appears three times except for one. Find that single one. ... 
- eclipse的使用一
			The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files ... 
- java获得本机IP,名称等
			import java.net.InetAddress; import java.net.UnknownHostException; public class GetLocalIP { public ... 
- 把Tomcat做成系统服务自动启动
			用Tomcat的bin目录下的service.bat,cmd,命令:进入到Tomcat的bin目录 service.bat install可以把tomcat做成系统服务;修改下计算机管理里面的服务,找 ... 
- IOS - 消息推送原理和实现
			一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图1-1: 1.Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Pr ... 
- osg osgDB::Options noTexturesInIVEFile ForceReadingImage dds_flip
			osgDB::writeNodeFile(node, path, new osgDB::Options("noTexturesInIVEFile")); noTexturesInI ... 
- [Android]   adb shell dumpsys的使用
			reference to :http://blog.csdn.net/g19920917/article/details/38032413 有两种方法可以查看service list: 1. adb ... 
