当前位置:网站首页>B-jiege's tree (pressed tree DP)
B-jiege's tree (pressed tree DP)
2022-07-06 20:15:00 【Park Xiaoming】
link : Jack's tree
The question :
Given a tree , Border right yes These six characters , Find different path numbers , The characters on the path are required to appear exactly an even number of times .
practice :
Only care about parity , Then a character can have two states ——1 Represents an odd number of ,0 Represents an even number of , To indicate whether six characters are odd or even at the same time , You can use 0~63 To express .
Definition In order to A node is the starting point , Status as How many paths are there , If My son is , The current character is , that , Except for the transfer from the son's state , There will be a new state , The state of not inheriting a son , To This side of can also be used as a state alone , Then when when , .
There are also some considerations As an intermediate node , This simple , from Calculation is enough .
Code :
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]++; // Don't add 1, The reason to add 1, Because of the definition x This point has only one side
}
}
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";
}
边栏推荐
- Finally, there is no need to change a line of code! Shardingsphere native driver comes out
- SSH connection denied
- 小微企业难做账?智能代账小工具快用起来
- 【云原生与5G】微服务加持5G核心网
- Is it difficult for small and micro enterprises to make accounts? Smart accounting gadget quick to use
- Unity makes AB package
- AsyncHandler
- 使用ssh连接被拒
- 转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源
- Anaconda安裝後Jupyter launch 沒反應&網頁打開運行沒執行
猜你喜欢
夏志刚介绍
Anaconda安装后Jupyter launch 没反应&网页打开运行没执行
Deep learning classification network -- zfnet
Tencent T3 teaches you hand in hand. It's really delicious
Monthly report of speech synthesis (TTS) and speech recognition (ASR) papers in June 2022
02 基础入门-数据包拓展
数字三角形模型 AcWing 1018. 最低通行费
Enumeration gets values based on parameters
爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解
腾讯安卓开发面试,android开发的基础知识
随机推荐
What happened to the kernel after malloc() was transferred? Attached malloc () and free () implementation source
Guangzhou's first data security summit will open in Baiyun District
【GET-4】
系统与应用监控的思路和方法
PowerPivot - DAX (first time)
Classic 100 questions of algorithm interview, the latest career planning of Android programmers
Standardized QCI characteristics
Oceanbase Community Edition OBD mode deployment mode stand-alone installation
redisson bug分析
精彩编码 【进制转换】
mod_wsgi + pymssql通路SQL Server座
OceanBase社区版之OBD方式部署方式单机安装
Initial experience of addresssanitizer Technology
Groovy basic syntax collation
转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源
POJ 3207 Ikki&#39;s Story IV – Panda&#39;s Trick (2-SAT)
[network planning] Chapter 3 data link layer (4) LAN, Ethernet, WLAN, VLAN
PowerPivot——DAX(初识)
语音识别(ASR)论文优选:全球最大的中英混合开源数据TALCS: An Open-Source Mandarin-English Code-Switching Corpus and a Speech
New generation garbage collector ZGC