codeforces 486 D. Valid Sets(树形dp)
题目链接:http://codeforces.com/contest/486/problem/D
题意:给出n个点,还有n-1条边的信息,问这些点共能构成几棵满足要求的树,构成树的条件是。
1)首先这颗树非空。
2)这些点必须是联通的。
3)这棵树上最大的权值-最小的权值<=d。
题解:一道明显的树形dp,所以一半就设dp[i]表示以i为根的能构成几棵树。为了方便起见。就将i设为最大的那个点。如果遇到val值相同的话,就定义一
个方向,当val值相同时只能从下表大的点到下表小的点。dfs写法如下:
void dfs(int pos , int pre , int num) {
int len = vc[pos].size();
dp[pos] = 1;//每次递归到的点都要作为根节点所以权值先赋为1。
for(int i = 0 ; i < len ; i++) {
int u = vc[pos][i];
if(u == pre) continue;
//一下就是转移要满足的条件
if(a[num] < a[u]) continue;
if(a[num] - a[u] > d) continue;
if(a[num] == a[u] && num < u) continue;
dfs(u , pos , num);
dp[pos] = dp[pos] + dp[pos] * dp[u];
dp[pos] %= mod;
}
}
#include <iostream>
#include <cstring>
#include <vector>
#define mod 1000000007
using namespace std;
int a[2010] , d , n;
long long dp[2010];
vector<int>vc[2010];
void dfs(int pos , int pre , int num) {
int len = vc[pos].size();
dp[pos] = 1;
for(int i = 0 ; i < len ; i++) {
int u = vc[pos][i];
if(u == pre) continue;
if(a[num] < a[u]) continue;
if(a[num] - a[u] > d) continue;
if(a[num] == a[u] && num < u) continue;
dfs(u , pos , num);
dp[pos] = dp[pos] + dp[pos] * dp[u];
dp[pos] %= mod;
}
}
int main() {
int u , v;
cin >> d >> n;
for(int i = 1 ; i <= n ; i++) {
cin >> a[i];
}
for(int i = 1 ; i < n ; i++) {
cin >> u >> v;
vc[u].push_back(v);
vc[v].push_back(u);
}
long long ans = 0;
for(int i = 1 ; i <= n ; i++) {
dfs(i , 0 , i);
ans += dp[i];
ans %= mod;
}
cout << ans << endl;
return 0;
}
codeforces 486 D. Valid Sets(树形dp)的更多相关文章
- codeforces 161D Distance in Tree 树形dp
		
题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...
 - codeforces 337D Book of Evil (树形dp)
		
题目链接:http://codeforces.com/problemset/problem/337/D 参考博客:http://www.cnblogs.com/chanme/p/3265913 题目大 ...
 - Codeforces 1276D - Tree Elimination(树形 dp)
		
Codeforces 题面传送门 & 洛谷题面传送门 繁琐的简单树形 dp(大雾),要是现场肯定弃了去做 F 题 做了我一中午,写篇题解纪念下. 提供一种不太一样的思路. 首先碰到这样的题肯定 ...
 - Codeforces 543D Road Improvement(树形DP + 乘法逆元)
		
题目大概说给一棵树,树的边一开始都是损坏的,要修复一些边,修复完后要满足各个点到根的路径上最多只有一条坏的边,现在以各个点为根分别求出修复边的方案数,其结果模1000000007. 不难联想到这题和H ...
 - Codeforces 815C Karen and Supermarket 树形dp
		
Karen and Supermarket 感觉就是很普通的树形dp. dp[ i ][ 0 ][ u ]表示在 i 这棵子树中选择 u 个且 i 不用优惠券的最小花费. dp[ i ][ 1 ][ ...
 - Codeforces 627D Preorder Test(二分+树形DP)
		
题意:给出一棵无根树,每个节点有一个权值,现在要让dfs序的前k个结点的最小值最大,求出这个值. 考虑二分答案,把>=答案的点标记为1,<答案的点标记为0,现在的任务时使得dfs序的前k个 ...
 - Codeforces 919D Substring (拓扑排序+树形dp)
		
题目:Substring 题意:给你一个有向图, 一共有n个节点 , m条变, 一条路上的价值为这个路上出现过的某个字符最多出现次数, 现求这个最大价值, 如果价值可以无限大就输出-1. 题解:当这个 ...
 - Codeforces 633F 树的直径/树形DP
		
题意:有两个小孩玩游戏,每个小孩可以选择一个起始点,并且下一个选择的点必须和自己选择的上一个点相邻,问两个选的点权和的最大值是多少? 思路:首先这个问题可以转化为求树上两不相交路径的点权和的最大值,对 ...
 - Codeforces 461B. Appleman and Tree[树形DP 方案数]
		
B. Appleman and Tree time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
 
随机推荐
- maven的编译规范
			
maven的中央仓库上的jar的包名必须小写.否则maven编译不通过. 如:Memcached-Java-Client-3.0.2 的jar包. 目录如下: com.whalin.memcached ...
 - 用多线程优化Excel表格数据导入校验的接口
			
公司的需求,当前某个Excel导入功能,流程是:读取Excel数据,传入后台校验每一条数据,判断是否符合导入要求,返回给前端,导入预览展示.(前端等待响应,难点).用户再点击导入按钮,进行异步导入(前 ...
 - CentOS 7.3下使用YUM 安装MySQL5.6
			
1.检查Linux系统中是否已安装 MySQL rpm -qa | grep mysql 返回空值的话,就说明没有安装 MySQL 注意:在新版本的CentOS7中,默认的数据库已更新为了Mariad ...
 - 佳木斯集训Day4
			
Day4的出题人好毒瘤啊!!! T1我打表过的,正解现在也不会 #include <bits/stdc++.h> #define MAXN 10050 #define ll long lo ...
 - 19 个 JavaScript 编码小技巧
			
这篇文章适合任何一位基于JavaScript开发的开发者.我写这篇文章主要涉及JavaScript中一些简写的代码,帮助大家更好理解一些JavaScript的基础.希望这些代码能从不同的角度帮助你更好 ...
 - 0x15 字符串
			
KMP算法 next数组的求法 void calc_next() { next[]=; , j=; i<=n; ++i) { &&a[i]!=a[j+]) j=next[j]; ...
 - linux学习总结--linux100day(day2)
			
Linux中的哲学--一切皆文件 为了便于操作,我们可以使用secureCRT或Xshell连接到我们的虚拟机. 要用远程工具连接到虚拟机上,我们只需要打开虚拟机上的ssh服务,在xshell中填写主 ...
 - 基于SMS短信平台给手机发送短信
			
JAVA发送手机短信,我知道的有三种方式,恰逢项目需求,自己整理了基于SMS的短信发送,其他两种这里就说说一下 使用webservice接口发送手机短信,这个可以使用sina提供的webservice ...
 - js拖拽上传图片
			
有时候,在开发中,需要遇到拖拽上传图片的需求,即从磁盘选中一张或多张图片,然后按着鼠标把图片拖动到页面上指定的区域,实现图片的上传. 1.后端上传图片的接口 我是之前用vue写一个简单的后台系统的时候 ...
 - 记一次Linux修改MySQL配置不生效的问题
			
背景 自己手上有一个项目服务用的是AWS EC2,最近从安全性和性能方面考虑,最近打算把腾讯云的MySQL数据库迁移到AWS RDS上,因为AWS的出口规则和安全组等问题,我需要修改默认的3306端口 ...