RT,代码如下:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<vector>
#include<bitset>
#include<string>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<deque>
#include<queue>
#include<stack>
#include<list>
#include<map>
#include<set>
#define int long long
using namespace std;
int ans=0x7fffffffffffff;
int n,p,k;
vector<int> g[100001],q[100001];
int sh[100001][101];
bool vis[100001][101];
int S,T;
void DP(){
memset(sh,0x3f,sizeof(sh));
memset(vis,0,sizeof(vis));
sh[S][0]=0;
vis[S][0]=1;
priority_queue<pair<int,pair<int,int> > > qmr;
for(int i=0;i<g[S].size();i++){
qmr.push(make_pair(-q[S][i],make_pair(g[S][i],0)));
qmr.push(make_pair(0,make_pair(g[S][i],1)));
sh[g[S][i]][0]=(q[S][i]);
sh[g[S][i]][1]=0;
}
while(qmr.size()){
int now=qmr.top().second.first;
int ooo=qmr.top().second.second;
qmr.pop();
if(vis[now][ooo]) continue;
vis[now][ooo]=1;
for(int i=0;i<g[now].size();i++){
if(vis[g[now][i]][ooo]) continue;
if(sh[now][ooo]+(q[now][i])<sh[g[now][i]][ooo]){
sh[g[now][i]][ooo]=sh[now][ooo]+(q[now][i]);
qmr.push(make_pair(-sh[g[now][i]][ooo],make_pair(g[now][i],ooo)));
}
}
if(ooo+1<=k)
for(int i=0;i<g[now].size();i++){
if(vis[g[now][i]][ooo+1]) continue;
if(sh[now][ooo]<sh[g[now][i]][ooo+1]){
sh[g[now][i]][ooo+1]=sh[now][ooo];
qmr.push(make_pair(-sh[g[now][i]][ooo+1],make_pair(g[now][i],ooo+1)));
}
}
}
}
signed main(){
cin>>n>>p>>k;
cin>>S>>T;
S++;
T++;
for(int i=1;i<=p;i++){
int x,y,z;
cin>>x>>y>>z;
x++;
y++;
g[x].push_back(y);
g[y].push_back(x);
q[x].push_back(z);
q[y].push_back(z);
}
DP();
for(int i=0;i<=k;i++){
ans=min(ans,sh[T][i]);
}
cout<<ans;
return 0;
}
看了几遍讨论区发现好像只有我一个人卡在了 #2。
估计又是什么奇怪的错误吧。