这道题是不给spfa活路吗( T了最后一个点
using namespace std;
const int N=5e4+10,M=2e5+10;
int n,m,p,s,t;
int h[N],e[M],ne[M],w[M],idx;
void add(int a,int b,int c)
{
e[++idx]=b;
ne[idx]=h[a];
h[a]=idx;
w[idx]=c;
}
long long dist[N][60];
pair<int,int> pre[N][60];
bool v[N][60];
queue<pair<int,int> > q;
void print(int x,int y)
{
if(!x) return;
print(pre[x][y].first,pre[x][y].second);
cout<<x<<"->";
}
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int main() {
n=read(),m=read(),p=read(),s=read(),t=read();
for(int i=1;i<=m;i++)
{
int x,y,z;
x=read(),y=read(),z=read();
add(x,y,z);
}
memset(dist,0x7f,sizeof(dist));
dist[s][0]=0;
q.push({s,0});
while(!q.empty())
{
int x=q.front().first,y=q.front().second;
q.pop();
v[x][y]=0;
for(int i=h[x];i;i=ne[i])
if(dist[x][y]+w[i]<dist[e[i]][(y+w[i])%p])
{
pre[e[i]][(y+w[i])%p]={x,y};
dist[e[i]][(y+w[i])%p]=dist[x][y]+w[i];
if(!v[e[i]][(y+w[i])%p]) q.push({e[i],(y+w[i])%p});
v[e[i]][(y+w[i])%p]=1;
}
}
if(dist[t][0]<0x3f3f3f3f)
{
cout<<dist[t][0]<<endl;
print(pre[t][0].first,pre[t][0].second);
cout<<t;
}
else
{
cout<<"jjc fails in travelling";
}
}