<JZOJ5913>林下风气_weixin_30723433的博客-程序员宝宝

快乐dp

反正考场写挂

#include<cstdio>
#include<cstring>
#include<cctype>
#include<iostream>
#define MOD 19260817
#define LL long long 
template <class T>inline void read(T &X)
{
    X=0;int W=0;char ch=0;
    while(!isdigit(ch))W|=ch=='-',ch=getchar();
    while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    X=W?-X:X;return;
}
int a[4000],n,k,head[4000],f[4000][2][2];//j最小值k最大值 
int cnt=0,mn,mx,ans;
bool boo[4000];
struct node{
    int to,next;}edge[8000];
void add(int u,int v)
{
    edge[++cnt].to=v;
    edge[cnt].next=head[u];
    head[u]=cnt;
}
void dfs(int x,int fa)
{
    if(mn==mx && a[x]==mn) f[x][1][1]=1; else
        if(a[x]==mx && a[x]==mn) f[x][1][0]=f[x][0][1]=f[x][1][1]=1; else
            if(a[x]==mx) f[x][0][1]=1; else
                if(a[x]==mn) f[x][1][0]=1; else f[x][0][0]=1;
    for(int i=head[x];i;i=edge[i].next)
    {
        int to=edge[i].to;
        if(to!=fa)
        {
            dfs(to,x);
            f[x][1][1]=f[x][1][1]* ( (LL)f[to][0][0] +f[to][0][1]+f[to][1][0]+f[to][1][1]+1 )%MOD;
            f[x][1][1]=(f[x][1][1]+ (LL)f[x][1][0] * (f[to][0][1]+f[to][1][1]) )%MOD;
            f[x][1][1]=(f[x][1][1]+ (LL)f[x][0][1] * (f[to][1][0]+f[to][1][1]) )%MOD;
            f[x][1][1]=(f[x][1][1]+ (LL)f[x][0][0] *f[to][1][1])%MOD;
            
            f[x][1][0]=(LL)f[x][1][0] * (f[to][1][0]+f[to][0][0]+1)%MOD;
            f[x][1][0]=(f[x][1][0]+ (LL)f[x][0][0] *f[to][1][0])%MOD;
            
            f[x][0][1]=(LL)f[x][0][1] * (f[to][0][1]+f[to][0][0]+1)%MOD;
            f[x][0][1]=(f[x][0][1]+ (LL)f[x][0][0] *f[to][0][1])%MOD;
            
            f[x][0][0]=(LL)f[x][0][0] *(f[to][0][0]+1)%MOD;
        }
    }
    if(a[x]<mn || a[x]>mx) f[x][0][0]=f[x][0][1]=f[x][1][0]=f[x][1][1]=0;
}
int main()
{
//    freopen("lkf.in","r",stdin);
//    freopen("lkf.out","w",stdout);
    read(n),read(k);
    for(int i=1;i<=n;i++)
        read(a[i]),boo[a[i]]=true;
    for(int i=1;i<n;i++)
    {
        int x,y ;
        read(x),read(y);
        add(x,y),add(y,x);
    }
    for(int i=0;i+k<=n;i++)
        if(boo[i] && boo[i+k])//差为k a[i]都小于n! 
        {
            mn=i,mx=i+k;//差为k 设为min&max 
            memset(f,0,sizeof(f));
            dfs(1,0);
            for(int j=1;j<=n;j++) ans=(ans+f[j][1][1])%MOD;
        }
    printf("%d",ans);
    return 0;
}

 

转载于:https://www.cnblogs.com/pile8852/p/9818654.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30723433/article/details/97484424

智能推荐

不积跬步,无以至千里——Java面试题集及答案剖析-程序员宝宝

前言不积跬步无以至千里,下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最新版本,去掉了EJB 2.x等无用内容,补充了数据结构和算法相关的题目、经典面试编程题、大型网站技术架构、操作系统、数据库、软件测试、设计模式、UML等内容,同时还对很多知识点进行了深入的剖析,例如hashCode方法的设计、垃圾收集的堆和代、Java新的并发编程、NIO.2等,相信对准

都说程序员是高薪职业,那程序员存款到底有多少呢?_Lunaqi的博客-程序员宝宝

很多程序员的消费都很单一,吃穿似乎都很简单,加班多的平常也没太多消费的机会,而一般收入又比较高,所以好奇程序员是不是都有很多存款,在知乎提问后一起来看看大家的回答:怕马云带着小姨子跑了吧。。哈哈哈哈哈,好典型又生动的描述.....有房的就是有底气        不同的人有不同的标准,穷人一顿三餐吃饱就好,土豪买个游艇还嫌少。我收敛一下,针对码农过体面生活而言,需要多少风险储备资金。大概源于对社会、...

朱松纯:从人工智能的角度解读《赤壁赋》兼谈“心”与“理”的平衡_QbitAl的博客-程序员宝宝

作者 | 朱松纯北京通用人工智能研究院院长北京大学讲席教授清华基础科学讲席教授编者按:本文由北京通用人工智能研究院院长朱松纯撰写,从人工智能的角度来解读千古一赋《赤壁赋》,试图架起AI研究...

SQL简介_sql语言中,用于引导条件的短语/单词是-程序员宝宝

SQL简介 SQL语言是集DDL、DML和DCL于一体的数据库语言。 SQL语言之DDL:定义数据库SQL语言之DML:操纵数据库SQL语言之DCL:数据权限控制SQL语言主要由以下9个单词引导的操作语句来构成,但每一条语句都能表达复杂的操作请求:(1)DDL语句引导词:Create、Alter、Drop模式的定义与删除。包括定义Database、Table、View、Index和完整性约束条件等。(2)DML语句引导词:Insert、De...

数据结构-第二讲 线性结构-学习笔记(MOOC 浙江大学 陈越 何钦铭)_typedef struct polynode *polynomial_liangwenhao1108的博客-程序员宝宝

目录第二讲 线性结构2.1 线性表及其实现2.1.1 引子:多项式表示2.1.2 线性表及顺序存储2.1.3 顺序存储的插入和删除顺序存储-数组实现-code2.1.4 链式存储及查找2.1.5 链式存储的插入和删除2.1.6 广义表与多重链表顺序存储-链表实现-code2.2 堆栈2.2.1 什么是堆栈2.2.2 堆栈的顺序存储实现(数组实现)堆栈的顺序存储实现-数组实现-code2.2.3 堆栈的链式存储实现(链表实现)堆栈的链式存储实现-链表实现-code2.2.4 堆栈应用:表达式求值2.3 队列2

随便推点

linux64平台上编译32位程序: GCC编译选项 -m64 -m32 -mx32_cherisegege的博客-程序员宝宝

原文链接:https://blog.csdn.net/yyywill/article/details/54426900x86-64 与 IA-64x86-64一般称为AMD x86-64,难道x86-64不是Intel首先搞出来的指令集么?这回的确是AMD干的,但是用的是Intel 16bits升到32bits向下兼容的套路。大致是这样的:x86:从1978年来的8086处理器开始,就...

常见递推关系_weixin_30555125的博客-程序员宝宝

Catalan数代码: f[0]=1; for(int i=1;i&lt;=100;i++) f[i]=f[i-1]*(4*i-2)/(i+1);转载于:https://www.cnblogs.com/pushinl/p/9910681.html

杂谈——String、StringBuffer、StringBuilder和StringTokenizer有什么区别_一只野生饭卡丘的博客-程序员宝宝

字符串是Java中很特殊的一个东西,本帅博主自学习Java以来被这小兔崽子拽入多次坑。而Java语言中有四个类可以对字符或者字符串进行操作,它们分别是Character、String、StringBuffer和StingTokenizer。其中Character用于单个字符操作,String用于字符串操作,属于不可变类,而StringBuffer也是用于字符串操作,不同之处是StringB...

jenkins中通过execute shell启动的进程会被杀死的问题(其它进程)_jenkins kill命令不好使_无怨_无悔的博客-程序员宝宝

今天在做自动化jenkins部署,遇到了一个问题.我在执行shell脚本的时候,会把其它进程也杀死,而且本进程也不再执行,查找资源,找到了一篇文章。  这是因为Jenkins默认会在Build结束后Kill掉所有的衍生进程。解决方法:1.重设环境变量build_id  在execute shell输入框中加入BUILD_ID=DONTKILLME,即可防止jen

c语言中字符串倒序_字符串倒序输出c语言_weiwei_lol的博客-程序员宝宝

字符串倒序#include &lt;stdio.h&gt;#include &lt;string.h&gt;int main(){ char str[] = "hello,world"; int len = strlen(str); char t; int i = 0; for(i = 0;i &lt; len/2;i++) { t = str[i]; str[i] = str[len - i - 1]; str[len - i - 1] = t; } printf("

第14周项目1-验证折半查找算法(1)_Godyi的博客-程序员宝宝

/** Copyright (c)2015,烟台大学计算机与控制工程学院* All rights reserved.* 文件名称:项目1-1.cbp* 作 者:李竹雅* 完成日期:2015年12月7日* 版 本 号:v1.0* 问题描述:验证折半查找算法* 输入描述:无* 程序输出:测试数据*/代码:#include #define MAXL 1

推荐文章

热门文章

相关标签