社区讨论

莫名其妙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 条回复,欢迎继续交流。

正在加载回复...