一直RE on #3#4#6#7#8#9
#include <bits/stdc++.h>
using namespace std ;
int n , m , k , s , t , ans = 2e9 ;
vector <pair<int,int> > g[2200010] ;
void connect () {
for ( int i = 1 ; i <= n ; i ++ ) {
for ( auto no : g[i] ) {
int x = no.second ;
for ( int j = 0 ; j < k ; j ++ ) {
g[i+j*n].push_back(make_pair(0,x+(j+1)*n)) ;
}
}
}
}
int dis[2200010] ;
bool vis[2200010] ;
priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q ;
void Dijkstra () {
memset(dis,127,sizeof dis);
q.push(make_pair(0,s)) , dis[s] = 0 ;
while ( q.size() ) {
int x = q.top().second ;
q.pop() ;
if ( vis[x] ) continue ;
for ( auto i : g[x] ) {
int y = i.second , w = i.first ;
if ( dis[y] > dis[x]+w ) {
dis[y] = dis[x]+w ;
q.push(make_pair(dis[y],y)) ;
}
}
vis[x] = 1 ;
}
}
signed main () {
scanf("%d%d%d%d%d",&n,&m,&k,&s,&t) ;
s++ , t++ ;
for ( int i = 1 , u , v , w ; i <= m ; i ++ ) {
scanf("%d%d%d",&u,&v,&w) ;
u++,v++ ;
for ( int j = 0 ; j <= k ; j ++ ) {
g[u+n*j].push_back(make_pair(w,v+n*j)) ;
g[v+n*j].push_back(make_pair(w,u+n*j)) ;
}
}
connect() ;
Dijkstra() ;
for ( int i = 0 ; i <= k ; i ++ ) {
ans = min(ans,dis[i*n+t]) ;
}
printf("%d",ans) ;
return 0 ;
}