玄关求条
查看原帖
玄关求条
1042427
IOI_winner楼主2025/7/29 15:28

提交记录

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;
}
2025/7/29 15:28
加载中...