[Luogu] 逛公园
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] 逛公园的更多相关文章
- [luogu P3953] [noip2017 d1t3] 逛公园
[luogu P3953] [noip2017 d1t3] 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张$N$个点$M$条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,$N ...
- [Luogu P3953] 逛公园 (最短路+拓扑排序+DP)
题面 传送门:https://www.luogu.org/problemnew/show/P3953 Solution 这是一道神题 首先,我们不妨想一下K=0,即求最短路方案数的部分分. 我们很容易 ...
- luogu 3953 逛公园
noip2017 D1T3 逛公园 某zz选手看到数据范围直接就最短路计数了,结果写错了爆零 题目大意: N个点M条边构成的有向图,且没有自环和重边.其中1号点是起点,N号点是公园的终点,每条边有一个 ...
- Luogu P3953 逛公园(最短路+记忆化搜索)
P3953 逛公园 题面 题目描述 策策同学特别喜欢逛公园.公园可以看成一张 \(N\) 个点 \(M\) 条边构成的有向图,且没有自环和重边.其中 \(1\) 号点是公园的入口,\(N\) 号点是公 ...
- 【图论 动态规划拆点】luoguP3953 逛公园
经典的动态规划拆点问题. 题目描述 策策同学特别喜欢逛公园.公园可以看成一张 NN 个点 MM 条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口, NN 号点是公园的出口,每条边有一个非负 ...
- [vijos P1083] 小白逛公园
不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...
- Bzoj 1756: Vijos1083 小白逛公园 线段树
1756: Vijos1083 小白逛公园 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1021 Solved: 326[Submit][Statu ...
- BZOJ 1756: Vijos1083 小白逛公园
题目 1756: Vijos1083 小白逛公园 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 856 Solved: 264[Submit][Sta ...
- JDOJ-P1260 VIJOS-P1083 小白逛公园
首先,在这里给大家推荐一个网站,https://neooj.com:8082,这是我母校的网站 言归正传,题目描述 VIJOS-P1083 小白逛公园 Time Limit: 1 Sec Memor ...
随机推荐
- 坦克大战--Java类型
写在前面 Java编译器下载教程(真的良心):https://blog.csdn.net/Haidaiya/article/details/81230636 本项目为本人独自制作,请各位尊 ...
- Exchanging Gifts--2019CCPC哈尔滨 E题
题意:http://codeforces.com/gym/102394/problem/E 1操作是给你一串数,2操作是连结两个串(所以可能很长),问你最后一个串的值(知道最多的个数就很好算,关键计算 ...
- docker使用的一些需要注意事项
1.程序需要前台运行 程序必须前台执行,如果是java进程的话 不要有nohup 或者使用service的方式进行后台运行 否则可能会出现频繁启动应用的问题 原因就是docker只能管理运行中的 ...
- Oracle 分页语句
** 写法1 :采用 ROWNUM的伪列: --查询10到20之间的数据 -- SELECT * FORM ( -- SELECT * , ROWNUM rn FROM TABLE_NAME -- W ...
- 0基础学习web技术
说实话0基础学习前端挺难的,当然也没有是技术是容易学习的 我只是想分享一下我的学习经历: 分为以下几点: 1:学习html和css ,学习完成之后可以模仿各大网站的静态网页 2:学习原生js基础,jq ...
- 【loj#2133 && luoguP2178】[NOI2015]品酒大会
题目传送门:loj#2133 luoguP2178 简要题意:给定一个字符串\(s\),每个后缀都有权值,对于每个长度\(len\),求出所有最长公共前缀\(\geq len\)的后缀对的总数 ...
- Python学习记录7-继承
面向对象的三大特性 封装 继承 多态 封装 封装就是对对象的成员进行访问限制 封装的三个级别: 公开,public 受保护的,protected 私有的,private public,private, ...
- 解决IDEA提示Untrusted Server's certificate 证书不可用( Server's certificate is not trusted )
Untrusted Server's certificate 如果你用的是Intellij系列IDE(GoLand, PHPStorm, WebStorm, IDEA),突然弹出个提示『Untrust ...
- 九:MVC主从表数据加载
EF对关联表数据加载的三种方式: 延迟加载:只有在需要的时候加载数据.EF默认的加载方式. 贪婪加载:一次性组织好数据,全部加载到内存中. 显式加载:需要通过代码手动加载关联表. 延迟加载 virtu ...
- 三:MVC之Lambda表达式
Lambda表达式 Lambda表达式是一个匿名方法,即没有方法名的方法. C#中的Lambda表达式使用Lambda运算符“=>”,该运算符读为“goes to”. 语法: 形参列表=> ...