MLE是什么鬼
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100001;
const int MAXN2=200001;
struct Edge{
int to,next,dis;
}e[MAXN2];
int head[MAXN],cnt=0;
void add(int u,int v,int w){
e[++cnt].next=head[u];
e[cnt].to=v;
e[cnt].dis=w;
head[u]=cnt;
}
int n,m,k,p;
int dis_n[MAXN];
int dfs1(int u,int fa){
for(int i=head[u];i;i=e[i].next){
int v=e[i].to,w=e[i].dis;
if(v==fa)continue;
dfs1(v,u);
dis_n[u]=min(dis_n[u],dis_n[v]+w);
}
}
int dfs2(int u,int diss){
int ans=0;
if(u==n)return 1;
for(int i=head[u];i;i=e[i].next){
int v=e[i].to,w=e[i].dis;
if(diss-w>=0){
ans+=dfs2(v,diss-w);
ans=ans%p;
}
}
return ans%p;
}
int main(){
int T;
cin>>T;
while(T--){
memset(dis_n,0x3f,sizeof(dis_n));
memset(e,0,sizeof(e));
memset(head,0,sizeof(head));
cnt=n=m=k=p=0;
cin>>n>>m>>k>>p;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
}
dis_n[n]=0;
dfs1(1,0);
int diss=dis_n[1]+k;
cout<<dfs2(1,diss)%p<<endl;
}
}