#include<bits/stdc++.h>
#define int long long
const int MaxN = 8888888, MaxM =9999999;
using namespace std;
int n,m,s,u,l,tt,k,nums;
int vis[MaxN],h[MaxN],dis[MaxN];
struct edge{
int t,w,nex;
}c[MaxM];
void cunchu(int a,int b,int v){
c[++l].t=b;
c[l].w=v;
c[l].nex=h[a];
h[a]=l;
}
inline void dijkstra(int s){
memset(dis,0x3f,sizeof(dis));
typedef pair<int,int>pii;
priority_queue<pii,vector<pii>,greater<pii> > q;
dis[s]=0;
q.push(make_pair(0,s));
while(!q.empty()){
int u=q.top().second;
q.pop();
if(vis[u]){
continue;
}
vis[u]=1;
for(int i=h[u];i;i=c[i].nex){
int v=c[i].t;
if(dis[v]>dis[u]+c[i].w){
dis[v]=dis[u]+c[i].w;
q.push(make_pair(dis[v],v));
}
}
}
}
signed main(){
cin>>n>>m>>k>>s>>tt;
s++;
tt++;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
u++;
v++;
cunchu(u,v,w);
cunchu(v,u,w);
for(int j=0;j<=k;j++){
cunchu(u+(j-1)*n,v+j*n,0);
cunchu(v+(j-1)*n,u+j*n,0);
cunchu(u+j*n,v+j*n,w);
cunchu(v+j*n,u+j*n,w);
}
}
for(int i=1;i<=k;i++){
cunchu(tt+(i-1)*n,tt+i*n,0);
}《--加的这坨循环在这里,原本没有的。
dijkstra(s);
cout<<dis[tt+k*n];
return 0;
}
原本是九十分,加了:
for(int i=1;i<=k;i++){
cunchu(tt+(i-1)*n,tt+i*n,0);
}
过后AC了,麻烦大佬解释一下为什么?