逛公园[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号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策策每天都会 ...
随机推荐
- java操作mongo
语法正确时,字段不匹配时,Mongo并不会抛出异常,这在语句调试时需多加注意. mongo自身的时间存储格式与java中的并不是完全匹配,Mongo采用UTC格式,而java中一般为GMT格式,有个时 ...
- 【小家Spring】聊聊Spring中的数据绑定 --- BeanWrapper以及内省Introspector和PropertyDescriptor
#### 每篇一句 > 千古以来要饭的没有要早饭的,知道为什么吗? #### 相关阅读 [[小家Spring]聊聊Spring中的数据转换:Converter.ConversionService ...
- MyBatis foreach标签的用法
From<MyBatis从入门到精通> 一.foreach实现in集合 1.映射文件中添加的代码: <!-- 4.4 foreach用法 SQL语句有时会使用IN关键字,例如id i ...
- 深入理解Java虚拟机一 阅读笔记
xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自 ...
- nginx处理302、303和修改response返回的header和网页内容
背景 遇到一个限制域名的平台,于是使用nginx在做网站转发,其中目标网站在访问过程中使用了多个302.303的返回状态,以便跳转到指定目标(为什么限制,就是防止他的网站的镜像). 在查找了一段资料后 ...
- .Net微信网页开发之使用微信JS-SDK自定义微信分享内容
第一步.微信JS-SDK的使用步骤,配置信息的生成获取讲解: 关于JS-SDK的使用步骤和timestamp(时间戳),nonceStr(随机串),signature(签名),access_token ...
- .NET领域驱动设计—初尝(一:疑问、模式、原则、工具、过程、框架、实践)
.NET领域驱动设计—初尝(一:疑问.模式.原则.工具.过程.框架.实践) 2013-04-07 17:35:27 标签:.NET DDD 驱动设计 原创作品,允许转载,转载时请务必以超链接形式标明 ...
- @GetMapping、@PostMapping和@RequestMapping的区别
@GetMapping 用于将Http Get 请求映射到特定处理程序方法的注释.具体来说就是:@GetMapping是一个作为快捷方式的组合注释 @RequestMapping(method = R ...
- shiro-helloworld
1.目录结构 2.log4j.properties # # Licensed to the Apache Software Foundation (ASF) under one # or more c ...
- 动手造轮子:基于 Redis 实现 EventBus
动手造轮子:基于 Redis 实现 EventBus Intro 上次我们造了一个简单的基于内存的 EventBus,但是如果要跨系统的话就不合适了,所以有了这篇基于 Redis 的 EventBus ...