社区讨论
莫名其妙TLE
P3371【模板】单源最短路径(弱化版)参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo8v1lbp
- 此快照首次捕获于
- 2023/10/28 01:01 2 年前
- 此快照最后确认于
- 2023/10/28 01:01 2 年前
然后发现莫名其妙TLE了
检查一番发现原版代码的Dijkstra函数用int定义却没有写return,改过来就A了
但奇怪的是,我在没有检查出该问题的时候就去交了隔壁的标准版,但是AC了,到这里来就会直接TLE
是什么造成评测不一致的?
代码附上:
CPP#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define MAX 500010
const int inf = 2147483647;
int n,m,s,cnt;
int dis[MAX],h[MAX],to[MAX],nxt[MAX],val[MAX];
/*
n:节点数
m:边数
s:出发点
cnt:链式前向星计数
*/
bool vis[MAX];
void add(int a,int b,int c){ //链式前向星存图
to[++cnt]=b;
val[cnt]=c;
nxt[cnt]=h[a];
h[a]=cnt;
}
struct node{
int v,w;
friend bool operator <(node a,node b){
return a.w>b.w;
}
} tmp; //tmp仅用来插入队列
priority_queue<node>q; //优先队列
int dj(){
for(int i=1;i<=n;i++){
dis[i]=inf; //初始化
}
dis[s]=0; //s即为起始点
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(){
cin>>n>>m>>s;
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
add(u,v,w);
}
dj();
for(int i=1;i<=n;i++){
cout<<dis[i]<<" ";
}
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...