首页 > 其他分享 >CF486D 题解

CF486D 题解

时间:2023-04-09 22:35:09浏览次数:47  
标签:puts int 题解 子图 CF486D read dp define

题目传送门

题目分析

不算很难的树形 \(\text{dp}\)。

令 \(dp_i\) 表示以 \(i\) 为根的子树中联通子图的个数。

在更新的时候,考虑儿子的联通子图和自己的,则有:

\[dp_u = dp_u \times (dp_v + 1) \]

选根的时候将 \(a\) 最大的作为根节点。还要注意另外一点,就是当 \(a_{fa}=a_{v}\) 时,双方互相都可以更新,所以会出现问题。此时将根节点设为编号大的那个即可。

贴上代码

#include<bits/stdc++.h>
#define int long long
#define debug puts("Shiina_Mashiro_kawaii")
#define ok puts("Yes")
#define no puts("No")
#define inf 1e9
using namespace std;
int read(){
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-48;
		c=getchar();
	}
	return x*f;
}
const int maxn=2e5+5;
const int mod=1e9+7;
int n,d;
int ans;
int a[maxn];
int dp[maxn];
int cnt_edge,head[maxn];
struct edge{
	int to,nxt;
}e[maxn<<1];
void add(int u,int v){
	e[++cnt_edge].nxt=head[u];
	e[cnt_edge].to=v;
	head[u]=cnt_edge;
}
void dfs(int u,int fa,int rt){
	dp[u]=1;
	for(register int i=head[u];i;i=e[i].nxt){
		int v=e[i].to;
		if(v==fa) continue;
		if((a[v]==a[rt]&&v<rt)||(a[v]-a[rt]>d||a[rt]>a[v])) continue;
		dfs(v,u,rt);
		dp[u]*=dp[v]+1;dp[u]%=mod;
	}
}
inline void init(){
	d=read();n=read();
	for(register int i=1;i<=n;++i) a[i]=read();
	for(register int i=1;i<n;++i){
		int u=read(),v=read();
		add(u,v);add(v,u);
	}
}
signed main(){
	init();
	for(register int i=1;i<=n;++i){
		dfs(i,0,i);
		ans+=dp[i];ans%=mod;
	}
	printf("%d",ans);
}

标签:puts,int,题解,子图,CF486D,read,dp,define
From: https://www.cnblogs.com/yizhixiaoyun/p/17301307.html

相关文章

  • 2023第14届蓝桥杯C/C++A组参赛记录+部分题解
    比赛记录早上起得还算早,没吃早餐,我吃早餐会瞌睡,也会变蠢。在门口还没来得及和队里其他同学聊几句就进场了......键盘还是一样的难用,软件有codeblocks和dev,很舒服。今年来参加蓝桥杯的人好多啊......女生也好多。听说今年蓝桥杯有统一的正经培训,不过和我这个被踢出蓝桥杯群的......
  • “科大国创杯”2023 年安徽省青少年信息学科普日活动 简要题解
    老年退役选手感受单调队列力量。初中组没有实现,如果有问题欢迎爆d我。小学组T1grade直接累加即可。不需要按百分比算(也就是别/100),那样可能会出现一些浮点数误差。T2order暴力枚举$t$就可以了T3string答案即为$cnt4+cnt5-cnt20$。注意到对于一个数,我们只关心其个位和十位......
  • [省选联考 2023] 染色数组 题解
    题目描述给定一个长度为\(n\)的正整数数组\(A\),其中每个数都在\(1\)到\(m\)之间,从左到右排成一排。现在要将每个数字染成红色或者绿色,我们定义一个染色方案为优秀的染色方案,当且仅当它满足:每个数\(A_{i}\)要么被染成红色,要么被染成绿色。红色的数从左到右依次严格递......
  • [省选联考 2023] 染色数组 题解
    题目描述给定一个长度为\(n\)的正整数数组\(A\),其中每个数都在\(1\)到\(m\)之间,从左到右排成一排。现在要将每个数字染成红色或者绿色,我们定义一个染色方案为优秀的染色方案,当且仅当它满足:每个数\(A_{i}\)要么被染成红色,要么被染成绿色。红色的数从左到右依次严格递......
  • P2824 [HEOI2016/TJOI2016]排序 题解
    题目传送门前言线段树好题!!!!咕咕了挺久的一道题目,很早之前就想写了,今天终于找了个时间A掉了。题意给定一个\(1\)到\(n\)的排列,有\(m\)次操作,分两种类型。1.0lr表示将下标在\([l,r]\)区间中的数升序排序。2.1lr表示将下标在\([l,r]\)区间中的数降序排序。给......
  • Windows10锁屏1分钟息屏问题解决 - 桌面、锁屏、屏保一站搞定
    Windows10桌面、锁屏、屏保一站解决一、背景在Windows10以前的Windows中,桌面和锁屏界面的超时息屏时间是一致的,都是简单在控制面板的电源设置中,调整关闭显示器时间即可。但到了Windows10这个世代,电源中的关闭显示器时间,只对桌面有效,也就是对没有锁屏的Windows桌面有效;一旦用户......
  • 2023年4月蓝桥杯B组A到G题解析
    试题A:阶乘求和本题总分:5分【问题描述】令S=1!+2!+3!+...+202320232023!,求S的末尾9位数字。提示:答案首位不为0。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得......
  • Vs-Code—控制台+乱码问题解决
    在创建第一个项目之前,需要按照环境和插件,这里对此不做阐述,读者自行查找资料。解决问题:更改输出位置+c/cpp中文乱码1、集成控制台输出->外部控制台输出1.1、c/cpp文件1、新建文件2、编写一段代码2、在运行和调试按钮下,点击创建launch.json文件在launch.json文件中,改"externalConsole......
  • Mondriaan's Dream 【POJ2411】 题解
    Mondriaan'sDream【POJ2411】题解——ByZy注:原题中的\(h,w\)在本文中使用\(n,m\)代替。一.题意分析:题目要求给定一个一定大小的矩形棋盘,求出使用\(1\times2\)大小的木条填充一共有多少种方案。读题,发现数据范围\((1\leh,w\le11)\),考虑使用状压DP算法,于是......
  • ECE 5101/CSE 5463 问题解答
    ECE5101/CSE5463,Spring2023Due:Apr.811:59pm,2023onCarmenHomeworkAssignment#4LateSubmissionNOTAcceptedHomeworkAssignment#41.(20points)InanunslottedALOHAsystem,thepacketarrivaltimesofallusersformaPoissonprocesshavingarate......