当前位置: 首页 > news >正文

LG9648

发现不满足题意的情况就是一个节点到多个子节点的边的字母相同,那么合法当且仅当每个节点到子节点的字母互不相同。那么可以统计每个节点连接的字母数量,并运用类似换根 dp 的思路,快速更新这个数量并实时维护符合条件的点的数量即可。时间复杂度 \(O(nA)\),其中 \(A=26\) 为字符集大小。

#include<iostream>
#include<cstdio>
#define N 200010
using namespace std;
struct E{int v,nxt;int w;
}e[N*2];
int n,a[N][26],tot,hd[N],cnt,ans;
bool flag[N];
void add(int u,int v,char w){tot++;e[tot].v=v,e[tot].w=w-'a',e[tot].nxt=hd[u];hd[u]=tot;
}
bool ck(int u){for(int i=0;i<26;i++)if(a[u][i]>1)return false;return true;
}
void dfs1(int u,int fa){for(int i=hd[u];i;i=e[i].nxt){int v=e[i].v,w=e[i].w;if(v==fa)continue;a[u][w]++;dfs1(v,u);}cnt+=ck(u);
}
void dfs2(int u,int fa){if(cnt==n)ans++;for(int i=hd[u];i;i=e[i].nxt){int v=e[i].v,w=e[i].w;if(v==fa)continue;cnt-=ck(u),cnt-=ck(v);a[u][w]--,a[v][w]++;cnt+=ck(u),cnt+=ck(v);dfs2(v,u);cnt-=ck(u),cnt-=ck(v);a[u][w]++,a[v][w]--;cnt+=ck(u),cnt+=ck(v);}
}
void solve(){int u,v;char w;cin>>n;for(int i=1;i<=n;i++){hd[i]=0;for(int j=0;j<26;j++)a[i][j]=0;}tot=0;for(int i=1;i<n;i++){cin>>u>>v>>w;add(u,v,w);add(v,u,w);}cnt=ans=0;dfs1(1,0);dfs2(1,0);cout<<ans<<'\n';return;
}
int main(){int T;cin>>T;while(T--)solve();return 0;
}
http://www.rkmt.cn/news/2749.html

相关文章:

  • CF2111C
  • 唐人日记
  • ABC394G
  • MX 炼石 2026 NOIP #5
  • Visual Studio 2026 预览体验版现已发布,一起来看看带来哪些新功能!
  • 小题狂练 (J)
  • 诡异的mysql8的问题
  • 协议版iM蓝号检测,批量筛选iMessages数据,无痕检测是否开启iMessage服务
  • 工业互联网认知实训台-一句话介绍
  • 在Spring boot 中使用@master 设置主从数据库
  • 第 16 章反射(reflection)
  • 设计模式-组合模式 - MaC
  • 【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态
  • 设计模式-桥接模式 - MaC
  • Python 降序排序:轻松搞定列表、字典和自定义对象
  • 第02周 预习、实验与作业:Java基础语法2、面向对象入门
  • 2025实测:6款主流公众号编辑器大比拼,解决你的排版难题!
  • 设计模式-适配器模式 - MaC
  • 达梦数据库安装和使用
  • Ubuntu 界面变为 Mac
  • PVE9环境下飞牛OS安装vGPU驱动
  • 02020304 .NET Core核心基础组件04-配置系统、Json文件配置、选项方式读取、扁平化环境变量其它配置源
  • md格式
  • 第7篇、Kafka Streams 与 Connect:企业级实时数据处理架构实践指南
  • 202207_BUGKU_二维码GIF
  • 20250910NOIP模拟赛
  • 【2025最新推荐】AI大模型API中转站 | 国内直连ChatGPT/Claude/Gemini全系API接口服务
  • html怎么写
  • 无重复字符的最长子串-leetcode
  • 两个常见的 计数问题 trick