当前位置:网站首页>51nod1656 合并trie树
51nod1656 合并trie树
2022-08-08 23:29:00 【Lqingyyyy】
给每个子树存一个 size 因为 我们只需要每个字符出现一次 所以如果x 或者 y一个没有的话才能返回 不然的话 就会重复
#include<iostream>
#include<cstring>
#define x first
#define y second
using namespace std;
const int N = (3e5 + 10) * 2,M = N * 2;
typedef pair<int,int> PII;
typedef long long ll;
int a[N];char b[N];
int head[N],to[M],last[M],cnt;
void add(int a,int b){
to[++cnt] = b;
last[cnt] = head[a];
head[a] = cnt;
}
int tree[N][30];
int v[N],T[N];
int ans;
int insert(int p,char a){
if(!p) p = ++ans;
++ans;
for(int i = 0; i <= 25; i++){
tree[ans][i] = tree[p][i];
tree[p][i] = 0;
}
v[ans] += v[p];
tree[p][a - 'a'] = ans;
v[ans]++;
v[p] = v[ans];
return p;
}
PII merge(int x,int y){
if(!x) return {
y,v[y]};
if(!y) return {
x,v[x]};
for(int i = 0; i <= 25; i++){
int d = v[tree[x][i]];
PII p = merge(tree[x][i],tree[y][i]);
if(p.x == tree[y][i]) v[x] += p.y;
if(p.x == tree[x][i]) v[x] -= d,v[x] += p.y;
tree[x][i] = p.x;
}
return {
x,v[x]};
}
ll maxn = 0,has = 0;
void dfs(int x,int pre){
int now = 0;
for(int i = head[x]; i != -1; i = last[i]){
int j = to[i];
if(j == pre) continue;
dfs(j,x);
if(!now) now = j;
else{
PII d = merge(T[now],T[j]);
T[now] = d.x;
}
}
T[0] = 0;
T[x] = insert(T[now],b[x]);
if(maxn < v[T[x]] + a[x]){
maxn = v[T[x]] + a[x];
has = 1;
}else if(maxn == v[T[x]] + a[x]) has++;
}
int main(){
int n;
cin >> n;
memset(head,-1,sizeof head);
for(int i = 1; i <= n; i++){
scanf("%d",&a[i]);
}
scanf("%s",b + 1);
for(int i = 1; i <= n - 1; i++){
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs(1,0);
cout << maxn << endl;
cout << has << endl;
return 0;
}
边栏推荐
猜你喜欢
【CUDA】version switch freely
Kubernetes web网站无法访问
如何使用 Eolink 实现 API 文档自动生成
2021 RoboCom 世界机器人开发者大赛-本科组(决赛)7-1绿色围栏(模拟)
wps备份与恢复在哪里?
[Bug solution] ValueError: Object arrays cannot be loaded when allow_pickle=False
Kubernetes 实现 CI/CD 发布流程
从洞察到决策,一文解读标签画像体系建设方法论丨DTVision分析洞察篇
STM8L LCD digital tube driver, thermometer LCD display
深拷贝与浅拷贝
随机推荐
makefile 自动编译 目录和子目录的 C文件
机器学习之知识点(一)
Free ARP
ViewOverlay与ViewGroupOverlay
iptables firewall content full solution
容斥原理
stm32 uses serial port to receive idle interrupt + dma to achieve variable length dma reception
有了国产 DevOps 工具 ,还怕数字化转型成本高?
STM8L 液晶数码管驱动,温度计液晶屏显示
Binary tree level traversal and examples
主从延迟原因及解决方案
Kubernetes 资源核心原理
(2022牛客多校五)H-Cutting Papers(签到)
想要精准营销,从学习搭建一套对的标签体系开始丨DTVision分析洞察篇
抽象内部类
最详树莓派4B装机流程及ifconfig不到wlan0的解决办法
微信小程序项目--订单
2022杭电多校六 1006-Maex (树形DP)
树莓派wiringPi库的使用补充
(2022牛客多校四)N-Particle Arts(思维)