37分求条,样例输出0,不知原因
求dalao指出错误帮忙调一下
#include <bits/stdc++.h>
using namespace std;
int n,m,k,t,s,cnt;
int dis[2200010],h[2200010],to[2200010],val[2200010],nxt[2200010],inf=2147483640,ans;
bool vis[2200010];
struct node{
int v,w;
friend bool operator < (node a,node b){
return a.w>b.w;
}
}tmp;
priority_queue <node> q;
int read()
{
int t=0,f=1;
char ss=getchar();
while(ss<'0'||ss>'9'){if(ss=='-')f=-f;ss=getchar();}
while(ss>='0'&&ss<='9'){t=t*10+ss-'0';ss=getchar();}
return t*f;
}
void add(int a,int b,int c){
to[++cnt]=b;
val[cnt]=c;
nxt[cnt]=h[a];
h[a]=cnt;
}
void dijkstra(){
for(int i=1;i<=n;i++)
dis[i]=inf;
dis[s]=0;
tmp.v=s,tmp.w=0;
q.push(tmp);
while(!q.empty()){
int u=q.top().v;
q.pop();
if(vis[u]) continue;
vis[u]=1;
for(int i=h[u];i;i=nxt[i]){
if(dis[to[i]]>(long long)dis[u]+val[i]){
dis[to[i]]=dis[u]+val[i];
tmp.w=dis[to[i]];
tmp.v=to[i];q.push(tmp);
}
}
}
}
int main()
{
ans=inf;
n=read();m=read();k=read();s=read();t=read();
for(int i=1;i<=m;i++){
int u=read(),v=read(),w=read();
add(u,v,w);
add(v,u,w);
for(int j=1;j<=k;j++){
add(u+j*n,v+j*n,w);
add(v+j*n,u+j*n,w);
add(u+j*n-n,v+j*n,0);
add(v+j*n-n,u+j*n,0);
}
}
dijkstra();
for(int j=0;j<=k;j++)
if(dis[t+j*n]<ans)
ans=dis[t+j*n];
cout<<ans;
}