目录

题目描述

输入描述:

输出描述:

输入

输出

输入

输出

输入

输出

思路:

代码:


题目描述

I'll see you on the dark side of the moon.

我们将在月之暗面相会。

给出一棵 n个点的树,有 x 种普通颜色,y 种特殊颜色

现在要给树上的每个节点染色,普通颜色染色没有限制,但两个相邻的节点不能染相同颜色的特殊颜色

求染色方案数,答案对 998244353 取模。

输入描述:

第一行三个整数 n,x,y ( 1≤n≤106,1≤x,y≤109 ) ,分别表示树的节点数,普通颜色的种数,特殊颜色的种数

接下来n−1 行描述这棵树,每行两个整数 u,v( 1≤u,v,≤n ) 表示从 u 到 v 有一条树边

保证输入的树合法。

输出描述:

一行一个整数,表示答案。

示例1

输入

2 1 2
1 2

输出

7

示例2

输入

5 3 3
1 2
1 3
3 4
3 5

输出

5664

示例3

输入

11 45 14
6 5
6 7
7 9
7 8
9 2
8 10
2 1
8 3
10 4
4 11

输出

188688550

思路:

1,用链式前向星建树,用转移方程做题

2,dp[i][j]第i节点,j表示的是普通颜色还是特殊颜色,

3,dp[i][0]=dp[i][0]*(dp[i-1][0]*x%mod+dp[i-1][1]*y%mod)%mod;该位为普通颜色

dp[i][1]=dp[i][1]*(dp[i-1][0]*x%mod+dp[i-1][1]*(y-1)%mod)%mod;该位为特殊颜色

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxj = 1e6+100 , mod = 998244353;
int v[maxj],dp[maxj][2],tot,nex[maxj],head[maxj],vis[maxj];
int n,x,y;
void add ( int u, int v1 ){++tot;v[tot]=v1;nex[tot] = head[u];head[u]=tot;//链式前向星
}
void dfs(int u,int fa){dp[u][0] = dp[u][1] = 1;for(int i = head[u] ; i ; i = nex[i] ) {int v1 = v[i] ;if(v1 == fa) continue ;dfs(v1,u);dp[u][0]=dp[u][0]*(dp[v1][0]*x%mod+dp[v1][1]*y%mod)%mod;dp[u][1]=dp[u][1]*(dp[v1][0]*x%mod+dp[v1][1]*(y-1)%mod)%mod;}
}
int32_t main(){ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);cin>>n>>x>>y;int be=1;int flag=1;for(int i=1;i<=n-1;++i){int u,v;cin>>u>>v;
//         if(flag){
//             be=u;
//             flag=0;
//         }add(u,v);//有向图,从没到达过的地方开始
//       add(v,u);//无向图,从没开始的地方开始,开始不同vis[v]++;}for(int i=1;i<=n-1;++i){if(vis[i]==0){be=i;break;}}dfs(be,-1);cout<<(dp[be][0]*x%mod+dp[be][1]*y%mod)%mod<<'\n';return 0;
}

D-月之暗面(树形dp)相关推荐

  1. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  2. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  3. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  4. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  5. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

  6. [NC15748]旅游 树形dp基础

    菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

  7. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

  8. 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)

    题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...

  9. 树形dp ---- 2018年杭电多校第二场 H travel

    题目大意: 就是给你一个带点权的树,找到3条独立互不相交的路径使得权值和最大 解题思路: 很经典的树形dp 我们设dp[root][j][k]dp[root][j][k]dp[root][j][k]表 ...

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

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

最新文章

  1. Redis 是怎么实现 “附近的人” 的?
  2. thinkphp5使用腾讯地图获取指定地址坐标:经纬度
  3. 信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构—— 1338:【例3-3】医院设置
  4. 我的世界基岩版json_(1.8.0.13+)我的世界Minecraft【BE】基岩版 /function 使用教程
  5. NLP之路-Dataset大全
  6. 用java写一个if语句
  7. php-redis中文参考手册_zset
  8. 安装ffmpeg及nginx模块
  9. Smali语言基础语法
  10. 如何在电脑端安装哔哩哔哩?
  11. java ppt转图片 失真_java转换ppt,ppt转成图片,获取备注,获取文本
  12. layui实现动态多级菜单
  13. 0x5085170C (ucrtbased.dll)处(位于 Project1.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000001A 时发生访问冲突。
  14. Pycharm远程连接服务器来跑代码
  15. 机器学习模型 知乎_算法有没有价值观?知乎内容推荐算法解析
  16. android动态请求权限
  17. win10双显示器 鼠标移动总感觉到另一屏困难
  18. 克莱茵瓶&莫比乌斯带
  19. ask fsk psk 数字调制的三种基本形式
  20. 如何获得查新检索报告?

热门文章

  1. 阿里软件测试工程师手把手教学——APP蓝牙连接测试
  2. Swing星际争霸 游戏源码实例,仅供开发学习交流
  3. Linux I2C 核心、总线、与设备驱动
  4. 数学有趣地超乎你的想象!超级有趣!
  5. 矩阵论代码实践之满秩分解
  6. docker的搭建和简单应用
  7. 对称、群论与魔术(三)——常见的几何对称性简介
  8. MCS51 数据存储器(RAM)
  9. libdmtx结合OpenCV识别DataMatrix二维码
  10. iphone导出视频 无法连接到设备_iPhone内存不足?深度清理方法了解一下