当前位置:网站首页>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";
}边栏推荐
猜你喜欢

OceanBase社区版之OBD方式部署方式单机安装

5. 無線體內納米網:十大“可行嗎?”問題

激进技术派 vs 项目保守派的微服务架构之争
腾讯T4架构师,android面试基础

Cesium Click to draw a circle (dynamically draw a circle)

HMS core machine learning service creates a new "sound" state of simultaneous interpreting translation, and AI makes international exchanges smoother

It's enough to read this article to analyze the principle in depth

数字三角形模型 AcWing 1018. 最低通行费

案例 ①|主机安全建设:3个层级,11大能力的最佳实践
腾讯安卓开发面试,android开发的基础知识
随机推荐
Standardized QCI characteristics
Tencent T3 teaches you hand in hand. It's really delicious
mod_wsgi + pymssql通路SQL Server座
350. Intersection of two arrays II
持续测试(CT)实战经验分享
(3) Web security | penetration testing | basic knowledge of network security construction, IIS website construction, EXE backdoor generation tool quasar, basic use of
AsyncHandler
Social recruitment interview experience, 2022 latest Android high-frequency selected interview questions sharing
[infrastructure] deployment and configuration of Flink / Flink CDC (MySQL / es)
Selenium advanced operations
A5000 vgpu display mode switching
In simple terms, interview surprise Edition
Pay attention to the partners on the recruitment website of fishing! The monitoring system may have set you as "high risk of leaving"
Cesium 点击绘制圆形(动态绘制圆形)
Blue Bridge Cup microbial proliferation C language
5. Wireless in vivo nano network: top ten "feasible?" problem
Cesium Click to draw a circle (dynamically draw a circle)
Color is converted to tristimulus value (r/g/b) (dry stock)
Node.js: express + MySQL实现注册登录,身份认证
Example of applying fonts to flutter