不吸氧TLE,吸氧WA
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <queue>
#include <utility>
#include <cstring>
using namespace std;
typedef pair<int,int> PAII;
int n,m;
const int N=200015,INF=2147483647,M=500015;
int w[M],h[N],e[M],ne[M],cnt,k,s,t;
int d[N];
bool vis[N];
void add_in(int a,int b,int c){
cnt++;e[cnt]=b; w[cnt]=c; ne[cnt]=h[a]; h[a]=cnt;
}
void djss(int s){
memset(d,0x3f,sizeof d);
d[s]=0;
priority_queue<PAII,vector<PAII>,greater<PAII> > dub;
dub.push({0,s});
while(dub.size()){
PAII temp=dub.top();
dub.pop();
int ff=temp.first,ss=temp.second;
if(vis[ss]) continue;
vis[ss]=true;
for(int i=h[ss];~i;i=ne[i]){
int j=e[i];
if(d[j]>d[ss]+w[i]){
d[j]=d[ss]+w[i];
dub.push({d[j],j});
}
}
}
}
int main(){
scanf("%d%d%d%d%d",&n,&m,&k,&s,&t);
memset(h,-1,sizeof(h));
for(int i=1;i<=m;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add_in(a,b,c);
add_in(b,a,c);
for(int j=1;j<=k;j++){
add_in(a+j*n,b+j*n,c);
add_in(b+j*n,a+j*n,c);
add_in(a+(j-1)*n,b+j*n,0);
add_in(b+(j-1)*n,a+j*n,0);
}
}
djss(s);
int ans=INF;
for(int i=0;i<=k;i++)
ans=min(ans,d[t+i*n]);
cout<<ans;
return 0;
}