二、代码
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<ll,ll>;
const int N=1e6+10;
ll n,m,k;
ll start,last;
vector<PII>G[N];
ll dist[N];
bool st[N];
void d(){
memset(dist, 0x3f, sizeof(dist));
dist[start] = 0;
memset(st, 0, sizeof(st));
priority_queue< PII, vector<PII>, greater<PII> >que;
que.push({ 0,start });
while (!que.empty())
{
PII p = que.top(); que.pop();
int v = p.second;
if (st[v]) continue;
st[v] = 1;
for (auto e:G[v])
{
if (dist[e.first] > dist[v] + e.second)
{
dist[e.first] = dist[v] + e.second;
que.push({ dist[e.first],e.first });
}
}
}
}
void slove(){
cin>>n>>m>>k;
cin>>start>>last;
ll x,y,z;
for(int i=1;i<=m;i++){
cin>>x>>y>>z;
G[x].emplace_back(y,z);
G[y].emplace_back(x,z);
for(int j=1;j<=k;j++){
G[x+(j-1)*n].emplace_back(y+j*n,0);
G[y+(j-1)*n].emplace_back(x+j*n,0);
G[x+j*n].emplace_back(y+j*n,z);
G[y+j*n].emplace_back(x+j*n,z);
}
}
for(int i=1;i<=k;i++){
G[last+(i-1)*n].emplace_back(last+i*n,0);
}
d();
cout<<dist[last+k*n]<<endl;
}
int main()
{
int T=1;
while(T--)
slove();
}