<JZOJ5913>林下风气
快乐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>林下风气的更多相关文章
- JZOJ 5913. 林下风气
Description 里口福因有林下风气,带领全国各地高校掀起了一股AK风,大家都十分痴迷于AK.里口福为了打击大家的自信心,出了一道自以为十分困难的题目.里口福有一棵树,第i个节点上有点权ai,他 ...
- jzoj5913
這道題我們可以套路的設置f[i]為當前節點為根的滿足條件方案數,然後枚舉根,計算必須包含當前根的方案 但是似乎很難計算 所以我們可以搞一個前綴和,將聯通塊的最大數和最小數相減<=k的方案和< ...
- [JZOJ NOIP2018模拟10.19]
T1写炸了今天,期望70却落了个20...连链上的都没有写对 T3什么什么线段树分治套AC自动机,表示我完全自闭了,幸好考场上没有杠T3 总体比赛还是比较舒服,暴力分给的蛮足的,不像昨天那样 T1:林 ...
随机推荐
- 201403-2 窗口 Java
要想到定义一个窗口类,判断点在不在矩形里好判断 需要一个数组,存放结果 import java.util.ArrayList; import java.util.List; import java.u ...
- Web应用和web.xml文件
1.构建Web应用 手动构建一个Web应用: 在任意的目录小创建一个文件夹,例如webDemo 在第一步创建的文件夹中创建一个WEB-INF文件夹(注意大写); 随意找到一个Web应用,将其中的web ...
- 跨站脚本(XSS)攻击
https://blog.csdn.net/extremebingo/article/details/81176394
- PAT Advanced 1056 Mice and Rice (25) [queue的⽤法]
题目 Mice and Rice is the name of a programming contest in which each programmer must write a piece of ...
- 题解 P6004 【[USACO20JAN]Wormhole Sort S】
这题真的是非常标准的模板题啊 看到连最少的边,第一时间会想到 \(kruskal\) .这道题的难点其实就一个:你要注意到连边权最大的边使整个图联通 为什么:题意是第i个点想走到 \(pos[i]\) ...
- 面向对象 part3 构造函数 原型函数
6.2创建对象 方法:对象字面量 object构造函数 缺点:都是创建单个对象.同一个接口创建多个对象,会产生大量重复代码 6.2.1工厂模式 用函数封装以特定的接口创建对象 function cr ...
- BZOJ4059[Cerc2012]Non-boring sequences(扫描线/分治)
这题正解应该是扫描线,就是发现DP的区间在两个维度都为连续段,于是可以直接扫描线.但不幸的是,扫描线常数过大,无法通过本题. 考虑分治.对于分治区间[l,r],可以记录pre和nxt表示其前/后一次出 ...
- Travelling Businessmen Problem
Travelling Businessmen Problem 先求出图的两个部分,可能只有一个部分 然后用set模拟,得到不同部分差最小的 #include <bits/stdc++.h> ...
- Python笔记_第二篇_面向过程_第二部分_5.第三方模块的使用和自定模块(以Pillow模块为例)
1. 安装第三方模块: 打开黑屏终端: cmd: pip -verson pip - V C:\windows\system32>pip -V pip from c:\python37\lib\ ...
- android上线之前代码混淆加密
https://blog.csdn.net/zuiwuyuan/article/details/48552701# https://blog.csdn.net/chaoyu168/article/de ...