传送门 :
题意一眼题了属于是,第一次碰到树形 d p dp dp 记录方案数记录一下
状态表示 : d p [ i ] [ 0 ] dp[i][0] dp[i][0]表示当前节点使用普通颜色 d p [ i ] [ 1 ] dp[i][1] dp[i][1]表示当前节点使用特殊颜色
状态转移 : 同上司的舞会, d p [ u ] [ 0 ] = d p [ u ] [ 0 ] ∗ ( d p [ x ] [ 0 ] + d p [ x ] [ 1 ] ∗ y % m o d ) % m o d ; dp[u][0] = dp[u][0]*(dp[x][0]+dp[x][1]*y\%mod)\%mod; dp[u][0]=dp[u][0]∗(dp[x][0]+dp[x][1]∗y%mod)%mod; d p [ u ] [ 1 ] = d p [ u ] [ 1 ] ∗ ( d p [ x ] [ 0 ] + d p [ x ] [ 1 ] ∗ ( y − 1 ) % m o d ) % m o d ; dp[u][1] = dp[u][1]*(dp[x][0]+dp[x][1]*(y-1)\%mod)\%mod; dp[u][1]=dp[u][1]∗(dp[x][0]+dp[x][1]∗(y−1)%mod)%mod;
Mycode
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define IOS ios::sync_with_stdio(false);
#define CIT cin.tie(0);
#define COT cout.tie(0);
#define ll long long
#define x first
#define y second
#define pb push_back
#define endl '\n'
#define all(x) (x).begin(),x.end()
#define Fup(i,a,b) for(int i=a;i=b;i--)
typedef priority_queue Pri_m;
typedef pair pii;
typedef vector VI;
map mp;
const int N = 1e6+10 ,mod = 998244353;
ll dp[N][2];
int has_fa[N];
int n,x,y;
vector g[N];
void dfs(int u,int fa){
dp[u][0] = x;
dp[u][1] = 1;
for(auto x : g[u]){
if(x == fa) continue;
dfs(x,fa);
dp[u][0] = dp[u][0]*(dp[x][0]+dp[x][1]*y%mod)%mod;
dp[u][1] = dp[u][1]*(dp[x][0]+dp[x][1]*(y-1)%mod)%mod;
}
}
void solve(){
cin>>n>>x>>y;
for(int i = 1; i>a>>b;
g[a].pb(b);
has_fa[b] = 1;
}
int root = 1;
while(has_fa[root]) root++;
dfs(root,0);
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?