当前位置:网站首页>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";
}
边栏推荐
- Unity load AB package
- Node. Js: express + MySQL realizes registration, login and identity authentication
- AsyncHandler
- Pay attention to the partners on the recruitment website of fishing! The monitoring system may have set you as "high risk of leaving"
- Monthly report of speech synthesis (TTS) and speech recognition (ASR) papers in June 2022
- Learn to punch in Web
- 系统与应用监控的思路和方法
- Enumeration gets values based on parameters
- 深度学习分类网络 -- ZFNet
- How to handle the timeout of golang
猜你喜欢
[Yann Lecun likes the red stone neural network made by minecraft]
[network planning] Chapter 3 data link layer (3) channel division medium access control
腾讯字节阿里小米京东大厂Offer拿到手软,老师讲的真棒
Tencent Android interview must ask, 10 years of Android development experience
PowerPivot - DAX (first time)
报错分析~csdn反弹shell报错
腾讯安卓开发面试,android开发的基础知识
Node.js: express + MySQL实现注册登录,身份认证
New generation garbage collector ZGC
BUUCTF---Reverse---easyre
随机推荐
Jupyter launch didn't respond after Anaconda was installed & the web page was opened and ran without execution
What happened to the kernel after malloc() was transferred? Attached malloc () and free () implementation source
redisson bug分析
Poj1149 pigs [maximum flow]
微信小程序常用集合
腾讯安卓开发面试,android开发的基础知识
PHP and excel phpexcel
Unity load AB package
Database specific interpretation of paradigm
02 基础入门-数据包拓展
golang的超时处理使用技巧
【Yann LeCun点赞B站UP主使用Minecraft制作的红石神经网络】
腾讯T3手把手教你,真的太香了
方法关键字Deprecated,ExternalProcName,Final,ForceGenerate
Example of applying fonts to flutter
POJ 3207 Ikki&#39; s Story IV – Panda&#39; s Trick (2-SAT)
Unity makes AB package
技术分享 | 抓包分析 TCP 协议
A5000 vGPU显示模式切换
Unity making plug-ins