当前位置:网站首页>B-杰哥的树(状压树形dp)
B-杰哥的树(状压树形dp)
2022-07-06 12:18:00 【朴小明】
链接:杰哥的树
题意:
给定一棵树,边权 是
这六个字符,求不同的路径数,要求路径上的字符都恰好出现偶数次。
做法:
只关心奇偶,那么一个字符就可有两个状态——1代表奇数个,0代表偶数个,要想同时表示六个字符是奇数还是偶数,就可用0~63来表示。
定义
为以第
个节点为起点,状态为
有多少路径数量,如果
的儿子是
,当前字符是
,那么
,除了由儿子的状态转移而来,还会有新的状态,不继承儿子的状态,
到
的这条边也可单独作为一个状态,则当
时,
。
还要考虑点
作为中间节点的情况,这个简单,由
计算即可。
代码:
struct tree
{
int y, val;
};
vector<tree> v[N];
int f[N][1ll << 6];
int ans;
void dfs(int x, int fa)
{
f[x][0] = 0;
for (auto tt : v[x])
{
int y = tt.y, val = tt.val;
if (y == fa) continue;
dfs(y, x);
for (int i = 0; i < (1ll << 6); i++)
{
f[x][i] += f[y][i ^ (1ll << val)];
if (i == (1ll << val)) f[x][i]++; //不能乱加1,之所以加1,是因为定义x这个点只出一条边
}
}
ans += f[x][0];
int sum = 0;
for (auto tt : v[x])
{
int y = tt.y, val = tt.val;
if (y == fa) continue;
for (int i = 0; i < (1ll << 6); i++)
{
int x1 = f[x][i] - f[y][i ^ (1ll << val)] - (i == (1ll << val));
int x2 = f[y][i ^ (1ll << val)] + (i == (1ll << val));
sum += x1 * x2;
}
}
ans += sum / 2;
}
void solve()
{
int n;
cin >> n;
for (int i = 1; i <= n - 1; i++)
{
int x, y;
char c;
scanf("%lld%lld", &x, &y);
cin >> c;
v[x].emplace_back(tree{y, c - 'a'});
v[y].emplace_back(tree{x, c - 'a'});
}
dfs(1, 0);
cout << ans << "\n";
}边栏推荐
- Selenium advanced operations
- Groovy basic syntax collation
- Introduction of Xia Zhigang
- After solving 2961 user feedback, I made such a change
- 语音识别(ASR)论文优选:全球最大的中英混合开源数据TALCS: An Open-Source Mandarin-English Code-Switching Corpus and a Speech
- 腾讯字节等大厂面试真题汇总,网易架构师深入讲解Android开发
- PowerPivot - DAX (first time)
- Configuration and simple usage of the EXE backdoor generation tool quasar
- 腾讯T3大牛手把手教你,大厂内部资料
- [cloud lesson] EI lesson 47 Mrs offline data analysis - processing OBS data through Flink
猜你喜欢

Configuration and simple usage of the EXE backdoor generation tool quasar

新一代垃圾回收器—ZGC

【Yann LeCun点赞B站UP主使用Minecraft制作的红石神经网络】

PowerPivot - DAX (first time)

信息系统项目管理师---第八章 项目质量管理

redisson bug分析
Classic 100 questions of algorithm interview, the latest career planning of Android programmers

枚举根据参数获取值

PowerPivot——DAX(初识)

Anaconda安装后Jupyter launch 没反应&网页打开运行没执行
随机推荐
Standardized QCI characteristics
腾讯T4架构师,android面试基础
5. 无线体内纳米网:十大“可行吗?”问题
MySQL must know and learn
腾讯T3大牛手把手教你,大厂内部资料
爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解
Groovy基础语法整理
Alibaba数据源Druid可视化监控配置
Wonderful coding [hexadecimal conversion]
Example of shutter text component
golang的超时处理使用技巧
POJ 3207 Ikki&#39; s Story IV – Panda&#39; s Trick (2-SAT)
JVM_常见【面试题】
rt-thread i2c 使用教程
青龙面板白屏一键修复
HMS Core 机器学习服务打造同传翻译新“声”态,AI让国际交流更顺畅
激进技术派 vs 项目保守派的微服务架构之争
Example of applying fonts to flutter
Linear distance between two points of cesium
[cloud native and 5g] micro services support 5g core network