优先队列Dijkstra只过了第五点,悬关xddd
查看原帖
优先队列Dijkstra只过了第五点,悬关xddd
1051584
Crushxl楼主2023/8/13 18:15

代码可以通过样例和第五个测试点,其它测试点全WA

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
int n,m,s,cnt,head[MAXN];

struct Edge{int next,to,w;}e[MAXN];

void AddEdge(int u,int v,int w){
	e[++cnt].next = head[u];
	e[cnt].to = v;
	e[cnt].w = w;
	head[u] = cnt;
}

struct Node{
	int to,dis;
	bool operator<(const Node a)const{a.dis<dis;}
};

int check[MAXN],dis[MAXN];
void Dijkstra(){
    memset(dis,0x3f3f3f3f,sizeof(dis));
	dis[s] = 0;
	priority_queue<Node> q;
	q.push({s,0});
	while(!q.empty()){
		Node tmp = q.top();
		q.pop();
		int x = tmp.to;
		if(!check[x]){
			for(int i=head[x];i!=0;i=e[i].next){
				int y = e[i].to;
				if(dis[y] > dis[x]+e[i].w){
					dis[y] = dis[x]+e[i].w;
					q.push({y,dis[y]});
				}
			}
		}
		check[x] = 1;
	}
}

int main(){
	cin >> n >> m >> s;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin >> u >> v >> w; 
		AddEdge(u,v,w);
	}
	Dijkstra();
	for(int i=1;i<=n;i++){
		cout << dis[i] << " ";
	}
	return 0;
}
2023/8/13 18:15
加载中...