为什么没RE
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7+7;
int diss[4007][4007];
struct node{
int qwq,dis,use;
};
int n,m,k;
int vis[4007];
int book[4007];
struct jk{
bool operator()(const node&t1,const node&t2)const{
return t1.dis>t2.dis;
}
};
void djs(){
priority_queue<node,vector<node>,jk>pq;
pq.push(node{1,0,0});
while(!pq.empty()){
node o=pq.top();
//cout<<"当前点: "<<o.qwq<<" dis: "<<o.dis<<" use: "<<o.use<<endl;
pq.pop();
vis[o.qwq]=1;
for(int i=1;i<=n;i++){
if(!vis[i+o.use*n]&&book[i+o.use*n]>diss[i+o.use*n][o.qwq]+o.dis){
book[i+o.use*n]=diss[i+o.use*n][o.qwq]+o.dis;
pq.push(node{i+o.use*n,book[i+o.use*n],o.use});
}
if(!vis[i+(o.use+1)*n]&&book[i+(o.use+1)*n]>diss[o.qwq][i+(o.use+1)*n]+o.dis){
book[i+(o.use+1)*n]=diss[o.qwq][i+(o.use+1)*n]+o.dis;
pq.push(node{i+(o.use+1)*n,book[i+(o.use+1)*n],o.use+1});
}
}
}
return ;
}
int main(){
cin>>n>>m>>k;
for(int i=0;i<=4000;i++){
for(int j=0;j<=4000;j++){
diss[i][j]=maxn;
}
}
for(int i=0;i<=4000;i++){
diss[i][i]=0;
book[i]=maxn;
}
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
for(int j=0;j<=k;j++){
diss[j*n+u][j*n+v]=w;
diss[j*n+v][j*n+u]=w;
}
for(int j=0;j<k;j++){
diss[j*n+u][(j+1)*n+v]=w/2;
diss[j*n+v][(j+1)*n+u]=w/2;
}
}
djs();
int ans=maxn;
for(int i=0;i<=k;i++){
ans=min(ans,book[i*n+n]);
}
cout<<ans;
return 0;
}
vis[]数组明显开小了,却没RE