逛公园[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号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策策每天都会 ...
随机推荐
- Centos7:yum安装MySQL5.7后如何设置root密码
Centos下安装软件的方式很简单,只需要通过yum install xxx命令即可.第一步当然检查是否有mysql的yum源,命令:yum list|grep mysql-community[主要还 ...
- watch 和 computed
<template> <div class="hello"> <h1>{{ msg }}</h1> <h2>Essent ...
- android surfaView surfaHolder video 播放
主文件 package cn.com.sxp;import android.app.Activity;import android.media.AudioManager;import android. ...
- 一个超级简单的Jetty实例
Maven: <!-- https://mvnrepository.com/artifact/org.mortbay.jetty/jetty --> <dependency> ...
- CitusDB UPSERT
CitusDB的upsert功能 postgresql9.5 版本支持 "UPSERT" 特性, 这个特性支持 INSERT 语句定义 ON CONFLICT DO UPDATE/ ...
- ASP.NET Core[源码分析篇] - Startup
应用启动的重要类 - Startup 在ASP.NET Core - 从Program和Startup开始这篇文章里面,我们知道了Startup这个类的重要性,它主要负责了: 配置应用需要的服务(服务 ...
- Python字符串格式化-学这些就够用了
一.思考❓❔ 1.什么是字符串格式化? 将变量(对象)的值填充到字符串中 在字符串中解析Python表达式 对字符串进行格式化显示 左对齐.右对齐.居中对齐 保留数字有效位数 2.你学过的字符串格式化 ...
- leetcode 48 矩阵旋转可以这么简单
一行代码解决矩阵旋转(方法三). 方法1: 坐标法 def rotate(self, matrix): n = len(matrix) # 求出矩阵长度 m = (n + 1) // 2 # 求出层数 ...
- java练习---6
//程序员:罗元昊 2017.9.24 import java.util.Scanner; public class L { public static void main(String[] args ...
- 转 python - Python在终端通过pip安装好包以后,在Pycharm中依然无法使用的解决办法
转 https://blog.csdn.net/kouyi5627/article/details/80531442 在终端通过pip装好包以后,在pycharm中导入包时,依然会报错.新手不知道具体 ...