CF1146F Leaf Partition 树形DP
感觉很多树上难以直接求解的问题都可以转化为动态规划问题并进行求解$.$
令 $f[x],g[x]$ 分别表示以 $x$ 为根的子树不想上延申,向上延申的方案数$.$
这里向上延申指的是会有其他子树的节点与该点子树中某个点颜色相同并进行配对$.$
考虑转移:
$f[x]=g[x]=\prod_{v\in son[x]} (f[v]+g[v]).$
然而,我们还要减掉一些不合法的.
令 $v'$ 表示我们当前枚举到的儿子.
先考虑 $f[x]:$
首先,$x$ 儿子中不可能只有一个延申:$f[x]$ 已经表示在 $x$ 终止了,而只有一个延申的话不能在 $x$ 终止.
所以,$f[x]=\prod_{v\in son[x]} (f[v]+g[v])-\frac{\prod_{v\in son[x]}f[v]}{f[v']}\times g[v'].$
而 $g[x]$ 中不能出现一个都不延申的情况,即 $g[x]=\prod_{v\in son[x]} (f[v]+g[v])-\prod_{v\in son[x]}f[v].$
#include <cstdio>
#include <algorithm>
#define N 200005
#define mod 998244353
#define ll long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
ll qpow(ll base,ll k)
{
ll tmp=1;
for(;k;base=base*base%mod,k>>=1) if(k&1) tmp=tmp*base%mod;
return tmp;
}
ll inv(ll k)
{
return qpow(k,mod-2);
}
int n,edges;
ll f[N],g[N];
int hd[N],to[N],nex[N],size[N];
void add(int u,int v)
{
nex[++edges]=hd[u],hd[u]=edges,to[edges]=v;
}
void dfs(int u)
{
int i;
size[u]=1;
ll sum=1;
f[u]=g[u]=1;
for(i=hd[u];i;i=nex[i])
{
int v=to[i];
dfs(v);
size[u]+=size[v];
sum=sum*f[v]%mod;
f[u]=f[u]*((f[v]+g[v])%mod)%mod;
}
g[u]=f[u];
if(size[u]>1)
{
g[u]=(g[u]+mod-sum)%mod;
for(i=hd[u];i;i=nex[i])
{
int v=to[i];
ll tmp=inv(f[v])*g[v]%mod;
tmp=tmp*sum%mod;
f[u]=(f[u]+mod-tmp)%mod;
}
}
}
int main()
{
int i,j;
// setIO("input");
scanf("%d",&n);
for(i=2;i<=n;++i)
{
int a;
scanf("%d",&a),add(a,i);
}
dfs(1);
printf("%lld\n",f[1]);
return 0;
}
CF1146F Leaf Partition 树形DP的更多相关文章
- HDU 5682 zxa and leaf 二分 树形dp
zxa and leaf 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5682 Description zxa have an unrooted t ...
- 洛谷P4438 道路 [HNOI/AHOI2018] 树形dp
正解:树形dp 解题报告: 传送门! 昂首先看懂题目趴QwQ大概就是说有棵满二叉树,有n个叶子节点(乡村)和n-1个非叶子节点,然后这棵树的每个节点有三个属性abc,对每个非叶子节点可以从与子节点的两 ...
- [JLOI2015]战争调度【暴力+树形Dp】
Online Judge:Bzoj4007,Luogu P3262 Label:暴力,树形Dp 题解 参考了这篇blog https://www.cnblogs.com/GXZlegend/p/830 ...
- [CQOI2009]叶子的染色【性质+树形Dp】
Online Judge:Bzoj1304,Luogu P3155 Label:无根树,树形Dp 题目描述 给定一棵\(N\)个节点的无根树,它一共有\(K\)个叶子节点.你可以选择一个度数大于1的节 ...
- poj3417 LCA + 树形dp
Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4478 Accepted: 1292 Descripti ...
- COGS 2532. [HZOI 2016]树之美 树形dp
可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...
- 【BZOJ-4726】Sabota? 树形DP
4726: [POI2017]Sabota? Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 128 Solved ...
- 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)
题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...
- 树形DP
切题ing!!!!! HDU 2196 Anniversary party 经典树形DP,以前写的太搓了,终于学会简单写法了.... #include <iostream> #inclu ...
随机推荐
- Treasure Island(两遍dfs)-- Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises)
题意:https://codeforc.es/contest/1214/problem/D 给你一个n*m的图,每次可以往右或者往下走,问你使(1,1)不能到(n,m)最少要放多少 ‘ # ’ . 思 ...
- Python接口开发小知识
关于数据库设计 接口开发多学习数据库表操作,这是要点 不存在删除数据,每个可能被删除数据的表加一个is_active属性 不同的表可以有多个相同的字段,字段属性少用禁止非空 不要设置太多主外键(高内聚 ...
- vs 2013 设置website项目端口
vs 2015/2013 设置website项目端口 在web项目创建之后,当我想重新debug时,出现the port xxx is in use 错误. 经过netstat分析,发现占用此项目端口 ...
- B2C电商平台开发心得(asp.net+bootstrap)
Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 html.css.javascript的,专为 web 应用设计,包含了移动设备优先的样式, 其响应式 ...
- 使用svn遇到的问题---(在编辑器没有配置svn的前提下)
日常写代码的过程中新增了文件,一般都是继续文件的书写,写完一部分后提交 新增文件后面经常忘记了add后commit 原来是可以在commit时勾选左下角的 [show unversioned file ...
- element-ui 中日期控件限制时间跨度
支持点击今天及之前任意日期,前后跨度不超过31天,且不超过今天 <el-date-picker v-model="searchForm.dateRange" type=&qu ...
- java开发环境构建
一. 基本工具安装 1. 配置终端命令别名 vim ~/.bash_profile *********************************************** # for colo ...
- yii2 response多次输出问题的查找
{ "IsSuccess": 1, "ErrMsg": "OK", "Data": { "IsSuccess& ...
- fetch的文件流下载及下载进度获取
下载过程中,获取进度,fetch API并没有提供类似xhr和ajax的 progress所以用 getReader()来循环读取大小 let size = 0; fetch( URL() + `/s ...
- kali安装开启ssh & 安装docker
ssh相关 一.配置SSH参数 . 修改sshd_config文件,命令为: vi /etc/ssh/sshd_config 将#PasswordAuthentication no的注释去掉,并且将N ...