#include<iostream>
#include<queue>
using namespace std;
const int N=50010;
int n,m,k,s,t,tot=0,head[N],dis[N];
bool done[N];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > dij;
struct node{
int to,val,nxt;
}lu[N];
void add(int a,int b,int c)
{
tot++;
lu[tot].to=b;
lu[tot].val=c;
lu[tot].nxt=head[a];
head[a]=tot;
}
void dijj()
{
for(int i=1;i<=n;i++) dis[i]=2147483646;
dis[s]=0;
dij.push(make_pair(0,s));
while(!dij.empty())
{
int front=dij.top().second;
dij.pop();
if(done[front]) continue;
done[front]=true;
for(int i=head[front];i;i=lu[i].nxt)
{
int to=lu[i].to,v=lu[i].val;
if(!done[to]&&dis[to]>dis[front]+v)
{
dis[to]=dis[front]+v;
dij.push(make_pair(dis[to],to));
}
}
}
}
int main()
{
cin>>n>>m>>k>>s>>t;
k++;s++;t++;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
for(int j=1;j<=k;j++)
{
add(x+(j-1)*n,y+j*n,0);
add(y+(j-1)*n,x+j*n,0);
add(x+j*n,y+j*n,z);
add(y+j*n,x+j*n,z);
}
}
dijj();
int ans=2147483647;
for(int i=t;i<=k*n;i+=n)
ans=min(ans,dis[i]);
cout<<ans;
return 0;
}
1个AC 4个RE 5个WA
我太南了QAQ