D-月之暗面(树形dp)
目录
题目描述
输入描述:
输出描述:
输入
输出
输入
输出
输入
输出
思路:
代码:
题目描述
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)相关推荐
- BNUOJ 52305 Around the World 树形dp
题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...
- [树形dp] Jzoj P5233 概率博弈
Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...
- fwt优化+树形DP HDU 5909
1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...
- BZOJ 1040 ZJOI2008 骑士 树形DP
题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...
- POJ 3342 树形DP+Hash
这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...
- [NC15748]旅游 树形dp基础
菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...
- 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings
题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...
- 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)
题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...
- 树形dp ---- 2018年杭电多校第二场 H travel
题目大意: 就是给你一个带点权的树,找到3条独立互不相交的路径使得权值和最大 解题思路: 很经典的树形dp 我们设dp[root][j][k]dp[root][j][k]dp[root][j][k]表 ...
- 2019 GDCPC or HDU6540 树形dp[计数dp] 详解
题目链接 题目大意: 就是给你一颗nnn个点的树,树上有mmm个关键点,你可以选择若干个关键点组成集合SSS,这个集合满足任意两点在树上的距离不超过kkk,问你有多少种选法? 解题思路: 我们考虑树形 ...
最新文章
- Redis 是怎么实现 “附近的人” 的?
- thinkphp5使用腾讯地图获取指定地址坐标:经纬度
- 信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构—— 1338:【例3-3】医院设置
- 我的世界基岩版json_(1.8.0.13+)我的世界Minecraft【BE】基岩版 /function 使用教程
- NLP之路-Dataset大全
- 用java写一个if语句
- php-redis中文参考手册_zset
- 安装ffmpeg及nginx模块
- Smali语言基础语法
- 如何在电脑端安装哔哩哔哩?
- java ppt转图片 失真_java转换ppt,ppt转成图片,获取备注,获取文本
- layui实现动态多级菜单
- 0x5085170C (ucrtbased.dll)处(位于 Project1.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000001A 时发生访问冲突。
- Pycharm远程连接服务器来跑代码
- 机器学习模型 知乎_算法有没有价值观?知乎内容推荐算法解析
- android动态请求权限
- win10双显示器 鼠标移动总感觉到另一屏困难
- 克莱茵瓶&莫比乌斯带
- ask fsk psk 数字调制的三种基本形式
- 如何获得查新检索报告?