https://www.luogu.org/problemnew/show/P3953

https://www.zybuluo.com/wsndy-xx/note/1134388

#include<cstdio>
#include<cstring>
#include<cctype> using namespace std;
const int N=1e5+,K=; int n,m,k,p,tot,ans=;
int first[N],next[N<<],en[N<<],w[N<<];
int first1[N*K],next1[N*K<<],en1[N*K<<],d[N*K];
int q[N<<],dis[N],dis1[N],u[N<<],v[N<<],t[N<<],f[N*K];
bool bz[N]; inline int read() {
int X=,w=;
char ch=;
while(!isdigit(ch)) {
if(ch=='-') w=-;
ch=getchar();
}
while(isdigit(ch)) X=(X<<)+(X<<)+ch-'',ch=getchar();
return X*w;
} inline void insert(int x,int y,int z) {
next[++tot]=first[x];
first[x]=tot;
en[tot]=y;
w[tot]=z;
} inline void insert1(int x,int y) {
next1[++tot]=first1[x];
first1[x]=tot;
en1[tot]=y;
d[y]++;
} inline int get(int x,int y) {
return (x-)*(k+)+y+;
} int main() {
int T=read();
while(T--) {
n=read(),m=read(),k=read(),p=read();
memset(first,tot=,sizeof(first));
for(int i=; i<=m; i++) {
u[i]=read(),v[i]=read(),t[i]=read();
insert(u[i],v[i],t[i]);
}
memset(dis,,sizeof(dis));
int l=dis[]=,r=q[]=;
while(l<r) {
int x=q[++l];
bz[x]=false;
for(int i=first[x]; i; i=next[i])
if(dis[x]+w[i]<dis[en[i]]) {
dis[en[i]]=dis[x]+w[i];
if(!bz[en[i]]) bz[q[++r]=en[i]]=true;
}
}
memset(first,tot=,sizeof(first));
for(int i=; i<=m; i++) insert(v[i],u[i],t[i]);
memset(dis1,,sizeof(dis1));
l=dis1[q[r=]=n]=;
while(l<r) {
int x=q[++l];
bz[x]=false;
for(int i=first[x]; i; i=next[i])
if(dis1[x]+w[i]<dis1[en[i]]) {
dis1[en[i]]=dis1[x]+w[i];
if(!bz[en[i]]) bz[q[++r]=en[i]]=true;
}
}
memset(first1,tot=,sizeof(first1));
memset(d,,sizeof(d));
for(int i=; i<=m; i++) {
int x=get(u[i],),y=get(v[i],dis[u[i]]+t[i]-dis[v[i]]);
for(int j=dis[u[i]]; j+t[i]+dis1[v[i]]<=dis[n]+k; j++,x++,y++) insert1(x,y);
}
int num=(k+)*n,sum=;
l=r=ans=;
memset(f,,sizeof(f));
for(int i=; i<=num; i++)
if(!d[i]) q[++r]=i;
f[]=;
while(l<r) {
int x=q[++l];
sum++;
for(int i=first1[x]; i; i=next1[i]) {
if(!--d[en1[i]]) q[++r]=en1[i];
f[en1[i]]+=f[x];
f[en1[i]]=f[en1[i]]>p?f[en1[i]]-p:f[en1[i]];
}
}
if(sum<num) printf("-1\n");
else {
for(int i=; i<=k; i++) ans=(ans+f[get(n,i)])%p;
printf("%d\n",ans);
}
}
return ;
}

[Luogu] 逛公园的更多相关文章

  1. [luogu P3953] [noip2017 d1t3] 逛公园

    [luogu P3953] [noip2017 d1t3] 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张$N$个点$M$条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,$N ...

  2. [Luogu P3953] 逛公园 (最短路+拓扑排序+DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P3953 Solution 这是一道神题 首先,我们不妨想一下K=0,即求最短路方案数的部分分. 我们很容易 ...

  3. luogu 3953 逛公园

    noip2017 D1T3 逛公园 某zz选手看到数据范围直接就最短路计数了,结果写错了爆零 题目大意: N个点M条边构成的有向图,且没有自环和重边.其中1号点是起点,N号点是公园的终点,每条边有一个 ...

  4. Luogu P3953 逛公园(最短路+记忆化搜索)

    P3953 逛公园 题面 题目描述 策策同学特别喜欢逛公园.公园可以看成一张 \(N\) 个点 \(M\) 条边构成的有向图,且没有自环和重边.其中 \(1\) 号点是公园的入口,\(N\) 号点是公 ...

  5. 【图论 动态规划拆点】luoguP3953 逛公园

    经典的动态规划拆点问题. 题目描述 策策同学特别喜欢逛公园.公园可以看成一张 NN 个点 MM 条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口, NN 号点是公园的出口,每条边有一个非负 ...

  6. [vijos P1083] 小白逛公园

    不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...

  7. Bzoj 1756: Vijos1083 小白逛公园 线段树

    1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1021  Solved: 326[Submit][Statu ...

  8. BZOJ 1756: Vijos1083 小白逛公园

    题目 1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 856  Solved: 264[Submit][Sta ...

  9. JDOJ-P1260 VIJOS-P1083 小白逛公园

    首先,在这里给大家推荐一个网站,https://neooj.com:8082,这是我母校的网站 言归正传,题目描述 VIJOS-P1083 小白逛公园 Time Limit: 1 Sec  Memor ...

随机推荐

  1. laravel_Supervisor队列

    Queue 1. 队列驱动 //数据库驱动,修改.env的QUEUE_DRIVER QUEUE_DRIVER=database 1. 数据库表 php artisan queue:table php ...

  2. eclipse导入maven空项目,eclipse导入时不识别maven项目

    经常我们在网上下载的一些开源项目中,想要导入eclipse中,却发现eclipse不识别这个项目,这时候怎么办呢? 解决办法多种多样,我这里举例出最实用的2种: 1.在项目的根目录中加入.classp ...

  3. 微信小程使用getCurrentPages函数操作父级数据

    微信小程使用getCurrentPages函数操作父级数据 let pages = getCurrentPages(); let prevPage = pages[pages.length - 2]; ...

  4. java怎么解除文件占用(Dom4j操作完xml后怎么关流)

    一.背景 项目中要解析xml,由于Dom4j的诸多优点,我就用Dom4j解析xml,代码如下: public void readXML() { SAXReader reader = new SAXRe ...

  5. LeetCode:180.连续出现的数字

    题目链接:https://leetcode-cn.com/problems/consecutive-numbers/ 题目 编写一个 SQL 查询,查找所有至少连续出现三次的数字. +----+--- ...

  6. jQuery实现购物车效果

    简单的购物车效果 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  7. c# 将datatable中的数据保存到excel文件中

    using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Lin ...

  8. instanceof解析

    https://www.zhihu.com/question/21574535/answer/18998914 Java instanceof 关键字是如何实现的? 基本理解 只是在同一个类加载器加载 ...

  9. web应用原理之——会话

    会话是大家开发Java EE Web应用的常用技术,那么会话是什么,会话的用途还有工作原理又是什么,下面就简单说一说. 什么是会话,在web应用中,作为客户端的浏览器,通过请求/响应这种模式访问同一个 ...

  10. 记一次引用maven插件报错解决方法

    1.报错信息如图: plugin org.springframework.boot:spring-boot-maven-plugin not found 2.解决方案: maven的配置文件[sett ...