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. Prime Number(CodeForces-359C)【快速幂/思维】

    题意:已知X,数组arr[n],求一个分式的分子与分母的最大公因数.分子为ΣX^arr[i],分母为X^Σarr[i],数组为不递减序列. 思路:比赛的时候以为想出了正确思路,WA掉了很多发,看了别人 ...

  2. LeetCode. 位1的个数

    题目要求: 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量). 示例: 输入:00000000000000000000000000001011 输 ...

  3. Pygame小游戏练习二

    @Python编程从入门到实践 Python项目练习 四.创建Ship类 建立ship.py,创建Ship类,管理飞船行为. # ship.py import pygame class Ship(): ...

  4. 怎样理解第三方Cookie

    1. Cookie往往是用来存储用户信息的, 但有些恶意站点设法伪造了带有正确Cookie的HTTP请求, 这时就会产生安全问题( CSRF 攻击 ). 这里恶意网站获取cookie的行为就是第三方c ...

  5. Java门面模式(思维导图)

    图1 门面模式[点击查看图片] 1,实体对象类 package com.cnblogs.mufasa.demo1; //3个子系统,解决问题的实体 public class StoreA { //示意 ...

  6. ASP .NET依赖注入理解

    ASP .NET依赖注入理解[转]:  https://www.cnblogs.com/wzk153/p/10892444.html

  7. JDK + Tomcat 安装 + 制作自定义镜像【第 1 篇 JDK】

    [第 1 篇 JDK]:https://www.cnblogs.com/del88/p/11842387.html[第 2 篇 Tomcat]:https://www.cnblogs.com/del8 ...

  8. 【php设计模式】桥接模式

    定义: 将抽象与实现分离,使它们可以独立变化.它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度. 角色: 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现 ...

  9. mybatis+oracle 批量插入,若数据库中有则做更新操作

    1.只批量插入: insert into WXPAY_ACCOUNT(id ,out_trade_no ,transaction_id)select SEQ_WXPAY_ACCOUNT.nextval ...

  10. zabbix环境mysql分区表管理历史数据_python实现

    zabbix添加数据库表partition zabbix系统自身有housekeeper进程来清除超过保留时间的数据,但是数据量上来之后就会比较影响性能,因此可以使用mysql的表分区来解决这个问题, ...