HDU5807 Keep In Touch (BestCoder Round #86 D ) 分布式dp

#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = +;
const int mod = ;
int T,n,m,lim,q,tot,w[N],dp[N][N][N][],head[N];
struct Edge{
int v,next;
}edge[N*N/];
void add(int u,int v){
edge[tot].v=v;
edge[tot].next=head[u];
head[u]=tot++;
}
inline void up(int &x,int y){
x+=y;if(x>=mod)x-=mod;
}
bool judge(int i,int j){
return abs(w[i]-w[j])<=lim;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&n,&m,&lim,&q);
for(int i=;i<=n;++i)scanf("%d",&w[i]);
memset(head,-,sizeof(head)),tot=;
for(int i=;i<m;++i){
int u,v;scanf("%d%d",&u,&v);add(v,u);
}
memset(dp,,sizeof(dp));
for(int i=n;i>;--i)
for(int j=n;j>;--j)
for(int k=n;k>;--k){
if(judge(i,j)&&judge(j,k)&&judge(k,i))
up(dp[i][j][k][],);
if(dp[i][j][k][])
for(int k1=head[i];~k1;k1=edge[k1].next)
up(dp[edge[k1].v][j][k][],dp[i][j][k][]);
if(dp[i][j][k][])
for(int k1=head[j];~k1;k1=edge[k1].next)
if(!judge(i,edge[k1].v))continue;
else up(dp[i][edge[k1].v][k][],dp[i][j][k][]);
if(dp[i][j][k][])
for(int k1=head[k];~k1;k1=edge[k1].next){
if(!judge(i,j)||!judge(i,edge[k1].v)||!judge(j,edge[k1].v))
continue;
up(dp[i][j][edge[k1].v][],dp[i][j][k][]);
}
}
while(q--){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
printf("%d\n",dp[x][y][z][]);
}
}
return ;
}
HDU5807 Keep In Touch (BestCoder Round #86 D ) 分布式dp的更多相关文章
- [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP)
[HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP) 题面 有三个人从一张N个点无重边的有向无环图上的三个点出发,每单位时间,他们分别选择当前 ...
- BestCoder Round #86 解题报告
A.Price List Sol 求和查询 Code #include<cstdio> #include<algorithm> #include<iostream> ...
- BestCoder Round #86
A题 Price List 巨水..........水的不敢相信. #include <cstdio> typedef long long LL; int main() { int T; ...
- HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
题目:传送门. 题意:题目说的是求期望,其实翻译过来意思就是:一个长度为 n 的数列(n>=3),按顺序删除其中每一个数,每次删除都是建立在最原始数列的基础上进行的,算出每次操作后得到的新数列的 ...
- BestCoder Round #86 部分题解
Price List 题意: 有n件商品,每天只能买一件,并且会记录账本,问有多少次一定记多了? 题解: 就是求和,最后如果大于和就输出1,否则0. 代码: #include <bits/std ...
- HDU5808Price List Strike Back (BestCoder Round #86 E) cdq分治+背包
严格按题解写,看能不能形成sum,只需要分割当前sum怎么由两边组成就好 #include <cstdio> #include <cstring> #include <c ...
- HDU5806 NanoApe Loves Sequence Ⅱ (BestCoder Round #86 C)二分
分析:大于等于m的变成1,否则变成0,预处理前缀和,枚举起点,找到第一个点前缀和大于m即可 找第一个点可以二分可以尺取 #include <cstdio> #include <cst ...
- HDU5805 NanoApe Loves Sequence (BestCoder Round #86 B)前后缀预处理
分析:维护空隙的差,然后预处理前缀最大,后缀最大,扫一遍 #include <cstdio> #include <cstring> #include <cmath> ...
- HDU5804 Price List (BestCoder Round #86 A)水题
分析:大于总和输出1 #include <cstdio> #include <cstring> #include <algorithm> using namespa ...
随机推荐
- MyBatis笔记——Mapper动态代理
前提概要 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mappe ...
- 禁用和启用链接(a元素|LinkButton)的js方法
4 function disableLink(link) {5 //设置href属性6 link.href = "javascript:void(0);";7 ...
- 在Hadoop1.2.1分布式集群环境下安装hive0.12
在Hadoop1.2.1分布式集群环境下安装hive0.12 ● 前言: 1. 大家最好通读一遍过后,在理解的基础上再按照步骤搭建. 2. 之前写过两篇<<在VMware下安装Ubuntu ...
- Android Calander Event
必须权限 <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-pe ...
- 15.导入网表及status介绍[原创]
一.导入网表 在导入网表之前你的封装需确认是在你的封装路径下 建立Board工程后: ① ② ③ ④放置器件 ⑤ (切记,封装路径一定要添加) 二.status介绍 --- (常用) -------- ...
- 第九篇 ERP实施项目中需求分析及方案设计的通用思路
顾问实施ERP就好想医生给患者看病抓药,不但具有类似的过程,而且具有其通用的思路. --详见http://bbs.erp100.com/thread-272856-1-1.html 顾问实施ERP就好 ...
- python 捕获 shell 脚本的输出结果
import subprocessoutput =Popen(["mycmd","myarg"], stdout=PIPE).communicate()[0] ...
- [HIHO1328]逃离迷宫(bfs,位压)
题目链接:http://hihocoder.com/problemset/problem/1328 这个题bfs到时候不止要存当前的坐标,还要存当前有哪几把钥匙.因为5把钥匙,所以可以直接用位来存,这 ...
- Hadoop集群(第10期副刊)_常用MySQL数据库命令
1.系统管理 1.1 连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 举例: 例1:连接到本机上的MySQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入 ...
- hdu 4622 Reincarnation trie树+树状数组/dp
题意:给你一个字符串和m个询问,问你l,r这个区间内出现过多少字串. 连接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 网上也有用后缀数组搞得. 思路 ...