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. 解决python语言在cmd下中文乱码的问题

    解决python语言在cmd下中文乱码的问题: a = "再见!"print (a.decode('utf-8').encode('gbk')) #解决在cmd下中文乱码的问题

  2. 怎样理解"不推荐不使用var的变量声明方式"这句话

    答: 因为不使用var声明的变量不会被预解析, 如下: console.log(a); console.log(b); var a = 1; b = 2;

  3. hdu 2066 Dijstra 堆优化

    嗯 有广搜的意思 #include<cstdio> #include<iostream> #include<queue> #include<vector> ...

  4. 复习最短路 spfa+dijstra堆优化

    题目很简单,, 但是wa了三次,, 用<vector>之前一定要记得clear()...简单说下 spfa的问题 和bell_forman有点类似 每次取出一个点 然后更新 并把更新了的节 ...

  5. C#异步编程中的最佳实践(做法)

    原文地址Stephen Cleary 写得很详细,尤其讲到了 GUI 上下文调用,在APS.NET中它会阻塞 GUI 线程,从而导致死锁.而控制台中却不存在这个问题. 比如开发过程中本地写控制台程序测 ...

  6. iOS开发中常用的颜色及其对应的颜色值

      R G B 值   R G B 值   R G B 值 黑色 0 0 0 #000000 黄色 255 255 0 #FFFF00 浅灰蓝色 176 224 230 #B0E0E6 象牙黑 41 ...

  7. JS的一些简单基础运算题

    1.输入一个四位数,在控制台分别显示个位,十位,百位,千位的数值 var a = prompt("请输入一个四位数的正整数"); var b = parseInt(a/1000); ...

  8. angularJs同步请求

    今天在写几级联动的时候,因为比如上一个接口请求数据成功返回后,才能根据上一个接口返回的数据请求下一个接口,以此类推:因此有了同步请求的想法. 在前端做同步读取显然不是好的实践做法,同步之后会严重影响前 ...

  9. Activiti使用总结

    工作流在我们日常的工作中用得可谓相当普及,尤其在企业内部管理系统,如考勤.财务.合同等系统中更是离不开它.在我们金融科技领域,工作流主要用于贷款审批.风控审核等环节.早期工作流在企业信息化发挥着很重要 ...

  10. 第五章、前端之JQuery

    目录 第五章.前端之JQuery 一.选择器 二.基本筛选器 三.样式操作 四.位置操作 五.文本操作 六.属性操作 七.文档处理 八.事件 九.动画效果 十.补充 第五章.前端之JQuery 一.选 ...