jzoj5913
這道題我們可以套路的設置f[i]為當前節點為根的滿足條件方案數,然後枚舉根,計算必須包含當前根的方案
但是似乎很難計算
所以我們可以搞一個前綴和,將聯通塊的最大數和最小數相減<=k的方案和<=k-1的方案計算一遍,減去就是答案
則f[i]=(f[son]+1)*… (f[son]滿足條件)
這樣子我們只需要判斷son是否滿足條件,因為son的所有子樹已經判斷過了
但是這樣可能會算重:當有多個節點的值與當前節點的值相同,都會算一遍
於是我們可以硬點只有根標號小的節點才會計算1次,大的直接跳過
代碼:
#include<bits/stdc++.h>
using namespace std;
#define jzm 19260817ll
typedef long long ll;
ll n,k,a[4010],v[8010],nxt[8010],h[4010],ec;
void add(ll x,ll y){v[++ec]=y;nxt[ec]=h[x];h[x]=ec;}
ll dfs(ll x,ll fa,ll p){
ll ans=1;
for(ll i=h[x];i;i=nxt[i])
if(v[i]!=fa&&((a[v[i]]<a[p]||(a[v[i]]==a[p]&&p<v[i]))&&a[p]-a[v[i]]<=k))
ans=(ans*(dfs(v[i],x,p)+1))%jzm;
return ans;
}
int main(){
freopen("lkf.in","r",stdin);
freopen("lkf.out","w",stdout);
scanf("%lld%lld",&n,&k);
for(ll i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(ll i=1;i<n;i++){
ll x,y;
scanf("%lld%lld",&x,&y);
add(x,y);add(y,x);
}
ll ans1=0;
for(ll i=1;i<=n;i++)
ans1=(ans1+dfs(i,0,i))%jzm;
if(k!=0){
k--;
for(ll i=1;i<=n;i++)
ans1=(ans1-dfs(i,0,i)+jzm)%jzm;
}
printf("%lld",ans1);
}
jzoj5913的更多相关文章
- <JZOJ5913>林下风气
快乐dp 反正考场写挂 #include<cstdio> #include<cstring> #include<cctype> #include<iostre ...
随机推荐
- 只有自己看的懂的vue 二叉树的3级联动
我是在vue做的数据 actions mutations state index页面获取值 传递给子页面 子页面的操作 <template> <div class='cascade_ ...
- [PHP] 转义字符 Escape character
\n is a symbol for new line \t is a symbol for tab and \r is for 'return'
- 20172325 2017-2018-2 《Java程序设计》第九周学习总结
20172325 2017-2018-2 <Java程序设计>第九周学习总结 教材学习内容总结 异常 1.学习了异常的基本概念: 2.区分异常与错误: 一个异常是指一个定义非正常情况或错误 ...
- 带你认识那些App可靠性设计
可靠性是软件一个重要的质量属性,它关注的是软件功能持续的可用性,以及出现故障之后是否能够容错,是否能快速的恢复使用. 可靠性六条基本准则 1.故障应在第一时间被检测和感知: 2.能避免的故障都不应该发 ...
- sys.argv和getopt.getopt()的用法
1.sys.argv Python中sys.argv是命令行参数从程序外部传值的的一种途径,它是一个列表,列表元素是我们想传进去的的新参数,所以可以用索引sys.argv[]来获得想要的值.因为一个写 ...
- hdu-1175(bfs+剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 思路:用bfs,注意要转弯的次数,次数大于两次就跳过. #include<iostream ...
- phonegap android插件,启动activity并返回值
Your execute menthod is not quite right. When you do: return new PluginResult(PluginResult.Status.OK ...
- 1024 Hello World
哈哈,原来今天是程序员的节日啊,快乐咯,可是今天好冷好冷~~
- 安装memcache服务
d:\tools\memcache\setup\memcached -d install
- git push/pull时总需要输入用户名密码的解决方案
在提交项目代码或者拉代码的时候,git会让你输入用户名密码,解决方案:(我们公司用的是gitlab) 执行git config --global credential.helper store命令 然 ...