当前位置:网站首页>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";
}边栏推荐
- Appx代码签名指南
- PHP与EXCEL PHPExcel
- Tencent T3 teaches you hand in hand. It's really delicious
- Linear distance between two points of cesium
- 腾讯架构师首发,2022Android面试笔试总结
- Crawler (14) - scrape redis distributed crawler (1) | detailed explanation
- 【GET-4】
- Tencent Android development interview, basic knowledge of Android Development
- 数字三角形模型 AcWing 1018. 最低通行费
- POJ 3207 Ikki&#39; s Story IV – Panda&#39; s Trick (2-SAT)
猜你喜欢

系统与应用监控的思路和方法

Tencent Android interview must ask, 10 years of Android development experience

激进技术派 vs 项目保守派的微服务架构之争

Tencent T3 teaches you hand in hand. It's really delicious

An East SMS login resurrection installation and deployment tutorial

22-07-05 七牛云存储图片、用户头像上传

beegfs高可用模式探讨

Case ① | host security construction: best practice of 3 levels and 11 capabilities

PowerPivot - DAX (first time)

爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解
随机推荐
Poj3617 best cow line
范式的数据库具体解释
腾讯架构师首发,2022Android面试笔试总结
[network planning] Chapter 3 data link layer (3) channel division medium access control
SSH connection denied
beegfs高可用模式探讨
PowerPivot——DAX(初识)
5. Nano - Net in wireless body: Top 10 "is it possible?" Questions
AsyncHandler
Microservice architecture debate between radical technologists vs Project conservatives
Crawler (14) - scrape redis distributed crawler (1) | detailed explanation
使用ssh连接被拒
In simple terms, interview surprise Edition
5. 無線體內納米網:十大“可行嗎?”問題
【GET-4】
Color is converted to tristimulus value (r/g/b) (dry stock)
新一代垃圾回收器—ZGC
Appx代码签名指南
Hudi vs Delta vs Iceberg
爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解