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

BUUCTF---Reverse---easyre
腾讯字节等大厂面试真题汇总,网易架构师深入讲解Android开发

5. Nano - Net in wireless body: Top 10 "is it possible?" Questions

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

Node. Js: express + MySQL realizes registration, login and identity authentication

Configuration and simple usage of the EXE backdoor generation tool quasar

【GET-4】
![[play with Linux] [docker] MySQL installation and configuration](/img/04/6253ef9fdf7d2242b42b4c7fb2c607.png)
[play with Linux] [docker] MySQL installation and configuration

Monthly report of speech synthesis (TTS) and speech recognition (ASR) papers in June 2022

Cesium Click to draw a circle (dynamically draw a circle)
随机推荐
【计网】第三章 数据链路层(4)局域网、以太网、无线局域网、VLAN
Node.js: express + MySQL实现注册登录,身份认证
From spark csc. csr_ Matrix generate adjacency matrix
redisson bug分析
腾讯字节阿里小米京东大厂Offer拿到手软,老师讲的真棒
AsyncHandler
技术分享 | 抓包分析 TCP 协议
Hudi vs Delta vs Iceberg
[cloud native and 5g] micro services support 5g core network
【云原生与5G】微服务加持5G核心网
腾讯字节等大厂面试真题汇总,网易架构师深入讲解Android开发
爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解
[cloud lesson] EI lesson 47 Mrs offline data analysis - processing OBS data through Flink
JS get browser system language
5. 無線體內納米網:十大“可行嗎?”問題
夏志刚介绍
Crawler (14) - scrape redis distributed crawler (1) | detailed explanation
1805. Number of different integers in the string
Appx代码签名指南
An East SMS login resurrection installation and deployment tutorial