LINK:tree



整场比赛看起来最不可做 确是最简单的题目。

感觉很难写 不过单独考虑某个点 容易想到树形dp的状态.

设f[x]表示以x为根的子树内有黑边的方案数。

白边方案只有一种所以不用记录。

转移 可能需要斟酌一下 我是列举了可能的所有情况 然后得到转移式子的。

\(f[x]=\Pi_{tn\in son_x}(f[tn]+2)-1\)

容易想到换根 容易发现可能不存在逆元 所以 需要乱搞一下.

(考场上没多想 看到树随机直接又接了一个暴力

就是没逆元再跑回去得到答案.(随机下挺快的不过我写挂了。

然后就是 处理前后缀积 也可以快速得到 可以利用vector 也可以直接记录除了某个点的前后缀积。

换根的时候 也要符合dp式子进行换根.我当时傻了开了vector 其实可以直接记录的。

  1. const int MAXN=100010;
  2. int n,len,top;
  3. int f[MAXN],ans[MAXN],g[MAXN],id[MAXN],q[MAXN];
  4. int lin[MAXN],ver[MAXN<<1],nex[MAXN<<1];
  5. vector<int>w1[MAXN],w[MAXN];
  6. inline void add(int x,int y)
  7. {
  8. ver[++len]=y;nex[len]=lin[x];lin[x]=len;
  9. ver[++len]=x;nex[len]=lin[y];lin[y]=len;
  10. }
  11. inline void dfs(int x,int fa)
  12. {
  13. int w2=1,ww=0;
  14. w[x].pb(1);w1[x].pb(1);
  15. go(x)if(tn!=fa)
  16. {
  17. dfs(tn,x);
  18. w2=(ll)w2*(1+f[tn]+1)%mod;
  19. w[x].pb(w2);
  20. w1[x].pb(w2);
  21. id[tn]=++ww;
  22. }
  23. w1[x].pb(1);w2=1;top=0;
  24. go(x)if(tn!=fa)q[++top]=tn;
  25. fep(top,1,i)
  26. {
  27. w2=(ll)w2*(2+f[q[i]])%mod;
  28. w1[x][i]=w2;
  29. }
  30. f[x]=(w2-1+mod)%mod;
  31. }
  32. inline void dp(int x,int fa,int v)
  33. {
  34. if(x!=1){ans[x]=((ll)(f[x]+1)*v-1+mod)%mod;}
  35. go(x)if(tn!=fa)
  36. dp(tn,x,((ll)v*w[x][id[tn]-1]%mod*w1[x][id[tn]+1]+2-1)%mod);
  37. }
  38. int main()
  39. {
  40. //freopen("1.in","r",stdin);
  41. get(n);
  42. rep(2,n,i)add(read(),i);
  43. dfs(1,0);ans[1]=f[1];
  44. dp(1,0,1);
  45. rep(1,n,i)put_((ans[i]+1)%mod);
  46. return 0;
  47. }

5.10 省选模拟赛 tree 树形dp 逆元的更多相关文章

  1. 4.13 省选模拟赛 树 树形dp 卷积 NTT优化dp.

    考试的时候 看到概率 看到期望我就怂 推了一波矩阵树推自闭了 发现 边权点权的什么也不是. 想到了树形dp 维护所有边的断开情况 然后发现数联通块的和再k次方过于困难. 这个时候 应该仔细观察一下 和 ...

  2. 5.10 省选模拟赛 拍卖 博弈 dp

    LINK:拍卖 比赛的时候 前面时间浪费的有点多 写这道题的时候 没剩多少时间了. 随便设了一个状态 就开始做了. 果然需要认真的思考.其实 从我的状态的状态转移中可以看出所有的结论. 这里 就不再赘 ...

  3. 6.10 省选模拟赛 小C的利是 高斯消元 矩阵行列式

    LINK:小C的利是 想起来把这道题的题解写了 .一个常识:利是在广东那边叫做红包. 关于行列式的题目 不过我不太会23333..口胡还是可以的. 容易想到10分的状压.不过没什么意思. 仔细观察要求 ...

  4. 4.3 省选模拟赛 序列游戏 dp

    可以发现 某一段被删除后状态难以表示 也难以链接起来. 考虑暴力 有40分的状压dp 暴力存状态 然后枚举转移即可.最后注意和f[0]这个状态取max 不然一分都没有. const int MAXN= ...

  5. 6.3 省选模拟赛 Decompose 动态dp 树链剖分 set

    LINK:Decompose 看起来很难 实际上也很难 考验选手的dp 树链剖分 矩阵乘法的能力. 容易列出dp方程 暴力dp 期望得分28. 对于链的情况 容易发现dp方程可以转矩阵乘法 然后利用线 ...

  6. 5.12 省选模拟赛 T2 贪心 dp 搜索 差分

    LINK:T2 这题感觉很套路 但是不会写. 区间操作 显然直接使用dp不太行 直接爆搜也不太行复杂度太高. 容易想到差分 由于使得整个序列都为0 那么第一个数也要i差分前一个数 强行加一个0 然后 ...

  7. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  8. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  9. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

随机推荐

  1. 基础设计模式-02 UML图

    在学习设计模式的时候,经常会涉及到类,接口之间关系的梳理,UML图就是一个很好的方式: 1.类,抽象类,接口 类: 抽象类: 接口: 1.抽象类斜体表示: 2.“+”表示public,"-& ...

  2. redis zset底层实现原理

    一.Zset编码的选择 1.有序集合对象的编码可以是ziplist或者skiplist.同时满足以下条件时使用ziplist编码: 元素数量小于128个 所有member的长度都小于64字节 其他: ...

  3. 04 Vue组件

    组件 每一个组件都是一个vue实例 每个组件均具有自身的模板template,根组件的模板就是挂载点 每个组件模板只能拥有一个根标签 子组件的数据具有作用域,以达到组件的复用 1.根组件 <di ...

  4. 解决IOS端微信浏览器input,textarea有内上边框阴影

    box-shadow:0px 0px 0px rgba(0,0,0,0); -webkit-appearance:none;

  5. Scala 基础(三):Scala语言快速开发入门

    1.Scala执行流程分析 2.Scala程序开发注意事项(重点) Scala源文件以 “.scala" 为扩展名. Scala程序的执行入口是main()函数. Scala语言严格区分大小 ...

  6. mongodb(一):数据库安装,部署(windows)

    全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/10885038.html,多谢~=.= 安装MongoDB 双击运行msi文件,一直“Next”. ...

  7. Azure Web App (二)使用部署槽切换部署环境

    一,引言 前天我们将到使用Azure的 Pass 服务 “Web App” 去部署我们的.NET Core Web项目,也同时有介绍到如何在VS中配置登陆中国区的Azure账号,今天接着讲,我们部署完 ...

  8. 关于springboot中过滤器和拦截器

    在解决跨域问题中,发现拦截器和过滤器用得不是熟练.就参考了下一下两个作者的文档.希望大家也可以汲取精华 文档1   https://blog.csdn.net/moonpure/article/det ...

  9. .Net Core微服务入门全纪录(完结)——Ocelot与Swagger

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 前言 上一篇[.Net Core微服务入门全纪录(八)--Docker Compose与容器网络]完成了docker-compose.y ...

  10. Ubuntu虚拟机设置共享文件夹

    Ubuntu虚拟机设置共享文件夹 注:个人笔记,小白笔记. 点击设置 进入到Ubuntu 中 cd /mnt/hgfs/ 后   我们会看到自己设置的共享文件夹.