快乐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=;int W=;char ch=;
while(!isdigit(ch))W|=ch=='-',ch=getchar();
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
X=W?-X:X;return;
}
int a[],n,k,head[],f[][][];//j最小值k最大值
int cnt=,mn,mx,ans;
bool boo[];
struct node{int to,next;}edge[];
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][][]=; else
if(a[x]==mx && a[x]==mn) f[x][][]=f[x][][]=f[x][][]=; else
if(a[x]==mx) f[x][][]=; else
if(a[x]==mn) f[x][][]=; else f[x][][]=;
for(int i=head[x];i;i=edge[i].next)
{
int to=edge[i].to;
if(to!=fa)
{
dfs(to,x);
f[x][][]=f[x][][]* ( (LL)f[to][][] +f[to][][]+f[to][][]+f[to][][]+ )%MOD;
f[x][][]=(f[x][][]+ (LL)f[x][][] * (f[to][][]+f[to][][]) )%MOD;
f[x][][]=(f[x][][]+ (LL)f[x][][] * (f[to][][]+f[to][][]) )%MOD;
f[x][][]=(f[x][][]+ (LL)f[x][][] *f[to][][])%MOD; f[x][][]=(LL)f[x][][] * (f[to][][]+f[to][][]+)%MOD;
f[x][][]=(f[x][][]+ (LL)f[x][][] *f[to][][])%MOD; f[x][][]=(LL)f[x][][] * (f[to][][]+f[to][][]+)%MOD;
f[x][][]=(f[x][][]+ (LL)f[x][][] *f[to][][])%MOD; f[x][][]=(LL)f[x][][] *(f[to][][]+)%MOD;
}
}
if(a[x]<mn || a[x]>mx) f[x][][]=f[x][][]=f[x][][]=f[x][][]=;
}
int main()
{
// freopen("lkf.in","r",stdin);
// freopen("lkf.out","w",stdout);
read(n),read(k);
for(int i=;i<=n;i++)
read(a[i]),boo[a[i]]=true;
for(int i=;i<n;i++)
{
int x,y ;
read(x),read(y);
add(x,y),add(y,x);
}
for(int i=;i+k<=n;i++)
if(boo[i] && boo[i+k])//差为k a[i]都小于n!
{
mn=i,mx=i+k;//差为k 设为min&max
memset(f,,sizeof(f));
dfs(,);
for(int j=;j<=n;j++) ans=(ans+f[j][][])%MOD;
}
printf("%d",ans);
return ;
}

<JZOJ5913>林下风气的更多相关文章

  1. JZOJ 5913. 林下风气

    Description 里口福因有林下风气,带领全国各地高校掀起了一股AK风,大家都十分痴迷于AK.里口福为了打击大家的自信心,出了一道自以为十分困难的题目.里口福有一棵树,第i个节点上有点权ai,他 ...

  2. jzoj5913

    這道題我們可以套路的設置f[i]為當前節點為根的滿足條件方案數,然後枚舉根,計算必須包含當前根的方案 但是似乎很難計算 所以我們可以搞一個前綴和,將聯通塊的最大數和最小數相減<=k的方案和< ...

  3. [JZOJ NOIP2018模拟10.19]

    T1写炸了今天,期望70却落了个20...连链上的都没有写对 T3什么什么线段树分治套AC自动机,表示我完全自闭了,幸好考场上没有杠T3 总体比赛还是比较舒服,暴力分给的蛮足的,不像昨天那样 T1:林 ...

随机推荐

  1. iTOP-4418开发板TF卡烧写-引导uboot

    基于迅为iTOP-4418开发板 将 TF 卡接入开发板,将拨码开关设置为 TF 卡启动,进入 uboot 模式,如下图所示. 如下图所示,使用命令“fastboot”,接着就可以通过 OTG 给 e ...

  2. LeetCode Input Initial Code

    说明 LeetCode提供的样本输入,显示上是数组Array,而后台的实际测试用例则是树TreeNode,链表ListNode等. 如果你是在页面手撸代码直接提交的,那没什么影响. 如果你是在本地ID ...

  3. oracle 学习(三)pl/sql语言函数

    系统内置函数 数学运算函数 字符串函数 统计函数 日期函数 用户定义函数:存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样 参数模式 IN模式:表示该参数时输入给函数的参数 OU ...

  4. 长沙中考2019数学T25讲解

    好久没更Blog了... 为了应付完成寒假作业,还是更一下(再不更都庚子年了) Upd:2020.1.22 题目 第一问 还是比较水友好的 给顶点就相当于多给了对称轴-\(\frac{b}{2a}\) ...

  5. 剑指offer【10】- 变态跳台阶

    题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 关于本题,前提是n个台阶会有一次n阶的跳法.分析如下: f(1) = 1 f(2) ...

  6. CodeForces 990B Micro-World(思维、STL)

    http://codeforces.com/problemset/problem/990/B 题意: 有n个细菌,每个细菌的尺寸为ai,现在有以常数k,如果细菌i的尺寸ai大于细菌j的尺寸aj,并且a ...

  7. 代码验证ncut和谱聚类的系数

    W = rand(30); W = W+W'; I = cell(3,1); I{1} = 1:10; I{2} = 11:20; I{3} = 21:30; vol = -ones(3,1); fo ...

  8. 设置R更新源

    命令行设置R更新源 创建文件 R.home()/etc/Rprofile.site 设置更新源 local({r <- getOption("repos") r[" ...

  9. TextBox换行C#文本框换行.net文本框换行textarea换行

    在TextBox中输入的内容,显示的时候如果用lable显示,无法换行 可以使用TextBox输入,然后也使用TextBox 显示,这样换行输入的内容,显示的时候也可以换行.显示的时候可以设置一下控件 ...

  10. BTree非递归

    preorder void PreOrder(BTNode* b) { BTNode* p = b; SqStack* st; InitStack(st); if (b != NULL) { Push ...