5.10 省选模拟赛 tree 树形dp 逆元
LINK:tree


整场比赛看起来最不可做 确是最简单的题目。
感觉很难写 不过单独考虑某个点 容易想到树形dp的状态.
设f[x]表示以x为根的子树内有黑边的方案数。
白边方案只有一种所以不用记录。
转移 可能需要斟酌一下 我是列举了可能的所有情况 然后得到转移式子的。
\(f[x]=\Pi_{tn\in son_x}(f[tn]+2)-1\)
容易想到换根 容易发现可能不存在逆元 所以 需要乱搞一下.
(考场上没多想 看到树随机直接又接了一个暴力
就是没逆元再跑回去得到答案.(随机下挺快的不过我写挂了。
然后就是 处理前后缀积 也可以快速得到 可以利用vector 也可以直接记录除了某个点的前后缀积。
换根的时候 也要符合dp式子进行换根.我当时傻了开了vector 其实可以直接记录的。
const int MAXN=100010;
int n,len,top;
int f[MAXN],ans[MAXN],g[MAXN],id[MAXN],q[MAXN];
int lin[MAXN],ver[MAXN<<1],nex[MAXN<<1];
vector<int>w1[MAXN],w[MAXN];
inline void add(int x,int y)
{
ver[++len]=y;nex[len]=lin[x];lin[x]=len;
ver[++len]=x;nex[len]=lin[y];lin[y]=len;
}
inline void dfs(int x,int fa)
{
int w2=1,ww=0;
w[x].pb(1);w1[x].pb(1);
go(x)if(tn!=fa)
{
dfs(tn,x);
w2=(ll)w2*(1+f[tn]+1)%mod;
w[x].pb(w2);
w1[x].pb(w2);
id[tn]=++ww;
}
w1[x].pb(1);w2=1;top=0;
go(x)if(tn!=fa)q[++top]=tn;
fep(top,1,i)
{
w2=(ll)w2*(2+f[q[i]])%mod;
w1[x][i]=w2;
}
f[x]=(w2-1+mod)%mod;
}
inline void dp(int x,int fa,int v)
{
if(x!=1){ans[x]=((ll)(f[x]+1)*v-1+mod)%mod;}
go(x)if(tn!=fa)
dp(tn,x,((ll)v*w[x][id[tn]-1]%mod*w1[x][id[tn]+1]+2-1)%mod);
}
int main()
{
//freopen("1.in","r",stdin);
get(n);
rep(2,n,i)add(read(),i);
dfs(1,0);ans[1]=f[1];
dp(1,0,1);
rep(1,n,i)put_((ans[i]+1)%mod);
return 0;
}
5.10 省选模拟赛 tree 树形dp 逆元的更多相关文章
- 4.13 省选模拟赛 树 树形dp 卷积 NTT优化dp.
考试的时候 看到概率 看到期望我就怂 推了一波矩阵树推自闭了 发现 边权点权的什么也不是. 想到了树形dp 维护所有边的断开情况 然后发现数联通块的和再k次方过于困难. 这个时候 应该仔细观察一下 和 ...
- 5.10 省选模拟赛 拍卖 博弈 dp
LINK:拍卖 比赛的时候 前面时间浪费的有点多 写这道题的时候 没剩多少时间了. 随便设了一个状态 就开始做了. 果然需要认真的思考.其实 从我的状态的状态转移中可以看出所有的结论. 这里 就不再赘 ...
- 6.10 省选模拟赛 小C的利是 高斯消元 矩阵行列式
LINK:小C的利是 想起来把这道题的题解写了 .一个常识:利是在广东那边叫做红包. 关于行列式的题目 不过我不太会23333..口胡还是可以的. 容易想到10分的状压.不过没什么意思. 仔细观察要求 ...
- 4.3 省选模拟赛 序列游戏 dp
可以发现 某一段被删除后状态难以表示 也难以链接起来. 考虑暴力 有40分的状压dp 暴力存状态 然后枚举转移即可.最后注意和f[0]这个状态取max 不然一分都没有. const int MAXN= ...
- 6.3 省选模拟赛 Decompose 动态dp 树链剖分 set
LINK:Decompose 看起来很难 实际上也很难 考验选手的dp 树链剖分 矩阵乘法的能力. 容易列出dp方程 暴力dp 期望得分28. 对于链的情况 容易发现dp方程可以转矩阵乘法 然后利用线 ...
- 5.12 省选模拟赛 T2 贪心 dp 搜索 差分
LINK:T2 这题感觉很套路 但是不会写. 区间操作 显然直接使用dp不太行 直接爆搜也不太行复杂度太高. 容易想到差分 由于使得整个序列都为0 那么第一个数也要i差分前一个数 强行加一个0 然后 ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- 10.17 NOIP模拟赛
目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
随机推荐
- 【板子】数论基础(持续更新ing...)
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu ...
- C++各种格式转换
int main() { stringstream sstr; //--------int转string----------- int a=100; string st ...
- 方正璞华Java面试总结(武汉)
方正璞华Java面试总结(武汉) 现在社会急缺复合型人才,计算机与日语的结合,具备这两种能力的人不愁工作,最后他们大多到的也是日企,甚至到日本去工作.至今为止接触的日企有光庭.方正璞华.先锋·商泰.英 ...
- Bootstrap 搭建基础页面
基于Bootstrap实现下图所示效果的页面,一个居中的标题和一个大按钮: <!DOCTYPE html> <html lang="zh-cn"> < ...
- shell专题(三):Shell脚本入门
1.脚本格式 脚本以#!/bin/bash开头(指定解析器) 2.第一个Shell脚本:helloworld (1)需求:创建一个Shell脚本,输出helloworld (2)案例实操: [atgu ...
- 数据分析05 /pandas的高级操作
数据分析05 /pandas的高级操作 目录 数据分析05 /pandas的高级操作 1. 替换操作 2. 映射操作 3. 运算工具 4. 映射索引 / 更改之前索引 5. 排序实现的随机抽样/打乱表 ...
- 机器学习实战基础(十二):sklearn中的数据预处理和特征工程(五) 数据预处理 Preprocessing & Impute 之 处理分类特征:处理连续性特征 二值化与分段
处理连续性特征 二值化与分段 sklearn.preprocessing.Binarizer根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量.大于阈值的值映射为1,而小于或等于阈值的值 ...
- Elasticsearch从入门到放弃:再聊搜索
在前文中我们曾经聊过搜索文档的方法,Elasticsearch 一般适用于读多写少的场景,因此我们需要更多的关注读操作. Elasticsearch 提供的 Search API 可以分为 URI S ...
- CF940E Cashback 线段树优化DP
题目描述 Since you are the best Wraith King, Nizhniy Magazin «Mir» at the centre of Vinnytsia is offerin ...
- Python 中的面向对象编程
面向对象编程(Object-oriented programming, OOP)是一种基于对象概念的编程范式,可包含属性(attribute)形式的数据以及方法(method)形式的代码.另一种对 O ...