逛公园[NOIP2017 D2 T3](dp+spfa)
题目描述
策策同学特别喜欢逛公园。 公园可以看成一张 \(N\)个点\(M\) 条边构成的有向图,且没有自环和重边。其中 1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的时间。
策策喜欢新鲜的事物,他不希望有两天逛公园的路线完全一样,同时策策还是一个特别热爱学习的好孩子,他不希望每天在逛公园这件事上花费太多的时间。如果1号点到N号点的最短路长为\(d\),那么策策只会喜欢长度不超过d+K的路线。
策策同学想知道总共有多少条满足条件的路线,你能帮帮他吗?
为避免输出过大,答案对 P取模。
如果有无穷多条合法的路线,请输出 −1。
[输入格式]
第一行包含一个整数 T, 代表数据组数。
接下来 T 组数据,对于每组数据:
第一行包含四个整数 N,M,K,P, 每两个整数之间用一个空格隔开。
接下来 M行,每行三个整数 u,v,w,代表编号为 u,v的点之间有一条权值为w的有向边,每两个整数之间用一个空格隔开。
[输出格式]
输出文件包含 T 行,每行一个整数代表答案。
对于 100% 的数据:1<=T<=5,1<=N<=100000,1≤P≤1000000000,1≤u,v≤N,0<=w<=1000,1<=K<=50,
数据保证:至少存在一条合法的路线.
往下\(\bigvee\)
欢迎来到
星光大道!
不管是
彩蛋
巨佬blog链接
信息人生格言
词语释义
都有!
都有!
都有!
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
继续
我最菜了
WQT最巨了
orz orz orz
sto sto sto
W
q
t
AK
IOI!
快到了
Codefoces
毁我人生!
40M
里根=李俊泽小根根
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
30M
愚昧=余星辰小妹妹
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
20M
引自JL LK
原曲:野百合也有春天
填词:蒟蒻LK
不管什么有环没环♫正环负环♫SPFA都能判
Dijkstra做的到吗♫做不做得到♫分数往下掉
各种问题单源最短♫差分约束♫玄学复杂度
在那信息技术♫图论的算法里♫SPFA也有春天
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
10M
JL1 blog
JL2 blog
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
\(\bigvee\)
XIBER!!!

作为NOIP 的压轴题,刚看到题就知道怎么DP的我写了30分钟愣是写不出来.
是个和Orange♂Good或者其他老师学过性竞信竞的正常人一看数据就知道这题肯定是DP,枚举K(不然人家干嘛给你那么小的K),dp[i][j]=从1到i,比最短路多走j的路径条数,显然
dp[i][j]=∑dp[x]dis[i]−dis[x]+j−edge(i,x),
其中x->i有路
于是乎再加个SPFA判负环这道简单的题就出来啦!!!
代码极其简单:
#include <iostream>
#include <queue>
#include <cstring>
#include <cmath>
#include <algorithm>
//反正都include了总没错
//NOIP时最好别用BITS,否则爆0都没人诉苦
using namespace std;
#define int long long//一时define一时爽,一直define一直爽
#define MAX1 200001
#define MAX2 800001
int loca[MAX1],nxt[MAX2],to[MAX2],len[MAX2],top1;
int Loca[MAX1],Nxt[MAX2],To[MAX2],Len[MAX2],top2;
int dis[MAX1],dis2[MAX2],vis2[MAX1][55];
int dp[MAX1][55],vis[MAX1],zihuan,u,v,w,t,n,m,k,p,ans;
void push1(int u,int v,int w) {
nxt[++top1]=loca[u];loca[u]=top1;to[top1]=v;len[top1]=w;//正常边
}
void push2(int u,int v,int w) {
Nxt[++top2]=Loca[u];Loca[u]=top2;To[top2]=v;Len[top2]=w;//反向边,dp用
}
void SPFA() {//顺便问下,SPFA的中文名字是什么???
vis[1]=1;
dis[1]=0;
queue<int> q;
q.push(1);
while (!q.empty()) {
int x=q.front();
q.pop();
for (int i=loca[x];i;i=nxt[i]) {
int y=to[i];
if (dis[y] > dis[x] + len[i]) {
dis[y] = dis[x] + len[i];
if (!vis[y]) {
vis[y] = 1;
q.push(y);
}
}
}
vis[x] = 0;
}
}
int dfs(int c, int now) {
if(dp[c][now]!=-1) return dp[c][now];
vis2[c][now] = 1;
dp[c][now] = 0;
for (int i=Loca[c];i;i = Nxt[i]) {
int xibo=dis[c]-dis[To[i]]+now-Len[i];//zzy不知道会不会打我QWQ
if (xibo<0) continue;
if (vis2[To[i]][xibo]) {
zihuan = 1;
return 0;
}
dp[c][now]+=dfs(To[i],xibo);
dp[c][now]%=p;
}
vis2[c][now] = 0;
return dp[c][now];
}
void init(){
memset(loca,0,sizeof(loca));
memset(Loca,0,sizeof(Loca));
memset(dp,-1,sizeof(dp));
memset(vis2,0,sizeof(vis2));
memset(vis,0,sizeof(vis));
memset(dis,0x7f,sizeof(dis));
zihuan=ans=top1=top2=0;
}
#undef int
int main() {
#define int long long
cin>>t;
for(int j=1;j<=t;j++){
init();
cin>>n>>m>>k>>p;
for(int i=1;i<=m;i++) cin>>u>>v>>w,push1(u,v,w),push2(v,u,w);
SPFA();
dp[1][0]=1;
for(int i=0;i<=k;i++)ans+=dfs(n,i),ans%=p;
dfs(n,k+1);
if(zihuan)cout<<-1<<endl;
else cout<<ans<<endl;
}
}
逛公园[NOIP2017 D2 T3](dp+spfa)的更多相关文章
- 逛公园 [NOIP2017 D1T3] [记忆化搜索]
Description 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的 ...
- 洛谷P3953 逛公园 [noip2017] 图论+dp
正解:图论(最短路)+dp(记忆化搜索) 解题报告: 这题真的是个好东西! 做了这题我才发现我的dij一直是错的...但是我以前用dij做的题居然都A了?什么玄学事件啊...我哭了TT 不过其实感觉还 ...
- noip2017D1T3逛公园(拓扑图上dp,记忆化搜索)
QWQ前几天才刚刚把这个D1T3写完 看着题解理解了很久,果然我还是太菜了QAQ 题目大意就是 给你一个n个点,m条边的图,保证1能到达n,求从1到n的 (设1到n的最短路长度是d)路径长度在[d,d ...
- 2018.11.01 洛谷P3953 逛公园(最短路+dp)
传送门 设f[i][j]f[i][j]f[i][j]表示跟最短路差值为iii当前在点jjj的方案数. in[i][j]in[i][j]in[i][j]表示在被选择的集合当中. 大力记忆化搜索就行了. ...
- 【题解】洛谷P3953 [NOIP2017TG] 逛公园(记忆化搜索+SPFA)
题目来源:洛谷P3953 思路 先用SPFA求一遍最短路 在求最短路的同时可以把所有点到终点的最短路求出来 dis数组 注意要反向SPFA 因为从起点开始可能会走到一些奇怪的路上导致时间负责度增加 ...
- NOIP2017 Day1 T3 逛公园
NOIP2017 Day1 T3 更好的阅读体验 题目描述 策策同学特别喜欢逛公园.公园可以看成一张\(N\)个点\(M\)条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,\(N\)号点 ...
- 逛公园「NOIP2017」最短路+DP
大家好我叫蒟蒻,这是我的第一篇信竞题解blog [题目描述] 策策同学特别喜欢逛公园. 公园可以看成一张 \(N\) 个点 \(M\) 条边构成的有向图,且没有自环和重边.其中 \(1\) 号点是公园 ...
- 【题解】NOIP2017逛公园(DP)
[题解]NOIP2017逛公园(DP) 第一次交挂了27分...我是不是必将惨败了... 考虑这样一种做法,设\(d_i\)表示从该节点到n节点的最短路径,\(dp(i,k)\)表示从\(i\)节点 ...
- NOIP2017逛公园(dp+最短路)
策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策策每天都会 ...
随机推荐
- WPF 入门笔记之事件
一.事件路由 1. 直接路由事件 起源于一个元素,并且不能传递给其他元素 MouserEnter 和MouserLeave 就是直接事件路由 2. 冒泡路由事件 在包含层次中向上传递,首先由引发的元素 ...
- 基于SpringBoot的WEB API项目的安全设计
SpringBoot的开箱即用功能,大大降低了上手一个WEB应用的门槛,友好的REST接口支持,在SpringCloud微服务体系中可编程性大大提高,本篇基于一个面向企业调用方用户的WEB API项目 ...
- LINUX安装源码软件经典三部曲
这几天一直在搞suse下的mplyaer.ffmpeg等源码编译安装,总结出源码软件安装三部曲,网上称为经典三部曲. 这三步分别为: 1. ./configure [options] 2. make ...
- KVM :vnc 远程控制kvm创建虚拟机
一.vnc远程控制服务器 前期准备: 1.编辑/etc/hosts vi /etc/hosts 10.1.16.32 kvm 2.关闭防火墙 service iptables stop 3.关闭sel ...
- 2019暑假集训 Intervals
题目描述 给定n个闭区间[ai,bi]和n个整数ci.你需要构造一个整数集合Z,使得对于任意i,Z中满足ai<=x<=bi的x不少于ci个.求Z集合中包含的元素个数的最小值. 输入 第一 ...
- 个人永久性免费-Excel催化剂功能第97波-快递单号批量查询物流信息
电商时代,快递已进千万家,做电商零售行业的,快递信息的再挖掘,也显得更有意义,是数据精细化运营中必不可少的一环.一般站在系统的角度,数据用于业务流转的增删改查使用,而对于分析需求来说,这些业务系统里集 ...
- Vincent的城堡
\(\mathcal{Description}\) \(\mathcal{Solution}\) 除去前k部分,后面的是随便怎么选的所以后面的就是\((n-k)^{n-k}\)种方案 前k部分,由于k ...
- 利用TCP协议,实现基于Socket的小聊天程序(初级版)
TCP TCP (Transmission Control Protocol)属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送.可靠性.有效流控.全双工操作和多路复用 ...
- C#中Tuple的使用
鉴于MSDN上面的机器翻译实在太烂,还是自己翻译吧,虽然麻烦了点(-_-). 定义:元组是具有 特定数量和序列 的元素 的数据结构 (注意断句哈!) 元组通常有四种使用方式︰ 一.表示一组数据 例如 ...
- 《VR入门系列教程》之2---VR头显
什么是虚拟现实? 虚拟现实的目标:让人们相信真实地处于一个虚拟世界中.要达到这个目标就得让人们的大脑(负责视觉和运动感知部分)欺骗他们.不同技术合在一起才可以创造这种幻觉,包括: 全立 ...