正题

题目链接:https://www.luogu.org/problemnew/show/P3914


题目大意

nnn个点每个点有些可以染的颜色,要求相邻颜色不相同,方案总数。


解题思路

树形dpdpdp,定义fx,if_{x,i}fx,i​表示点xxx的染颜色iii的方案数。然后定义zx=∑i=1mfxiz_x=\sum_{i=1}^mf_{x_i}zx​=∑i=1m​fxi​​

然后显然动态转移方程fx,i=zy−fy,i(x−>y)f_{x,i}=z_y-f_{y,i}(x->y)fx,i​=zy​−fy,i​(x−>y)


codecodecode

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int XJQ=1e9+7,N=5001;
int tot,n,m,f[N][N],z[N],ls[N];
struct node{int to,next;
}a[2*N];
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void dp(int x,int fa)
{for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa) continue;dp(y,x);int k=1;for(int j=1;j<=m;j++)f[x][j]=1ll*f[x][j]*((z[y]-f[y][j]+XJQ)%XJQ)%XJQ;}for(int j=1;j<=m;j++)(z[x]+=f[x][j])%=XJQ;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){int k,x;scanf("%d",&k);for(int j=1;j<=k;j++)scanf("%d",&x),f[i][x]=1;}for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}dp(1,0);printf("%d",z[1]);
}

P3914-染色计数【树形dp】相关推荐

  1. 叶子的染色-基础树形dp

    题目描述 原题来自:CQOI 2009 给一棵有 m 个节点的无根树,你可以选择一个度数大于 11 的节点作为根,然后给一些节点(根.内部节点.叶子均可)着以黑色或白色.你的着色方案应保证根节点到各叶 ...

  2. [HAOI2015]树上染色(树形dp,树形背包)

    链接:https://ac.nowcoder.com/acm/problem/19996 来源:牛客网 题目描述 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个 ...

  3. [CQOI2009]叶子的染色(树形dp)

    链接:https://ac.nowcoder.com/acm/problem/19914 来源:牛客网 题目描述 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部 ...

  4. bzoj 4033: [HAOI2015]树上染色(树形DP)

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 1786  Solved: 754 [Submit][Sta ...

  5. 洛谷P3155:叶子的染色(树形dp)

    解析 本题的关键是选取哪一个根对答案没有影响 还有一个重要的性质是:根节点必定涂色 这点对每棵子树作为独立的子问题时依然成立 然鹅我完全没有看到上面那俩性质 直接暴力设计dp状态0..1.2 开始莽 ...

  6. P3177-[HAOI2015]树上染色【树形dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3177 题目大意 nnn个点的一棵树,将kkk个点染成黑色,其他是白色,使得黑点之间和白点之间两两距离和最大. 解 ...

  7. bzoj1304 [CQOI2009]叶子的染色 dfs+树形dp

    这个类型的题应该是做过很多次,但做起来还是比较慢 这个题常规方法是枚举根,但这样是n^2的,这样就考虑优化 可以作为根的点一定构成一棵树,所以每次找相邻的点一定可以考虑所有情况 然后就是如何用父节点的 ...

  8. 【bzoj1304】[CQOI2009]叶子的染色 树形dp

    题目描述 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到每个叶子的简单路径上都至少包含一个有色结点( ...

  9. 【树形dp】P3155 [CQOI2009]叶子的染色

    你的着色方案应该保证根结点到每个叶子的简单路径上都至少包含一个有色结点(哪怕是这个叶子本身). 由于题目的这一点要求,我们可以得出,叶子节点的着色方案只与其上方第一个有色节点有关,所以选择哪个节点做r ...

  10. 2019 GDCPC or HDU6540 树形dp[计数dp] 详解

    题目链接 题目大意: 就是给你一颗nnn个点的树,树上有mmm个关键点,你可以选择若干个关键点组成集合SSS,这个集合满足任意两点在树上的距离不超过kkk,问你有多少种选法? 解题思路: 我们考虑树形 ...

最新文章

  1. Coolite Toolkit学习笔记五:常用控件Menu和MenuPanel
  2. STL - 容器 - Set
  3. android 点击edittext全选,Android - 阻止edittext复制/粘贴,然后双击全选
  4. PPT 下载 | 神策数据张涛:企业服务客户全生命周期运营三步曲总览篇
  5. 【Servlet】request对象获取请求头数据和用户数据
  6. Tcl Tutorial 笔记8 · proc
  7. 深刻反省:好的习惯必须坚持,不论心情怎样
  8. SPSS 有调节的中介与有中介的调节【SPSS 042期】
  9. 高等代数——大学高等代数课程创新教材(丘维声)——3.3笔记+习题
  10. android 科技感动画,PPT最炫动画,3分钟学会超有科技感的扫描动画,轰动全场!...
  11. 白化滤波器matlab程序,04实验四:白化滤波器的设计实验报告
  12. 操作系统 - 王道 - 第五章 I/O
  13. 贪吃蛇c语言程序 简书,贪吃蛇游戏(scratch编程)
  14. 三国志战略版360区S4服务器合并信息,三国志战略版S3合区表 新赛季哪些服务器合区...
  15. accumulate 的用法
  16. 编译原理上机——函数绘图语言(一)
  17. SAP 发票金额容差与供应商容差
  18. C++ pair的比较大小
  19. 前程无忧财报:招聘巨头囚于天花板
  20. PyCharm报错:Please specify a different SDK name解决方法

热门文章

  1. php转译html,使用php转义输出HTML到JavaScript
  2. python property setter_Python:动态属性 property setter 以及 __getattr__ 属性
  3. circle后面是什么意思 python_Ape circle Python操作-第2-01章-列表操作,小猿圈,作业
  4. ctf php 读取flag,BugkuCTF flag.php(反序列化)
  5. vue ref 绑定的事件需要移除吗_Vue易遗忘的基础复习(二)
  6. 两数、三数、四数之和相关题目(Leetcode题解-Python语言)
  7. 浅谈Web前端安全策略xss和csrf,及又该如何预防?
  8. C++实现具有[数组]相似特征的类DoubleSubscriptArray
  9. hdu 2069 Coin Change(改)-dp
  10. 数据结构与算法--最小的k个数