16分求助,除#5以外全WA,Dijkstra+堆优化
查看原帖
16分求助,除#5以外全WA,Dijkstra+堆优化
608273
___PatrickChen___楼主2022/8/27 19:41
#include <bits/stdc++.h>
#define endl '\n'

using namespace std;

int dis[100005],p[100005],head[100005],n;
bool vis[100005];
struct edge{
	int v,w,next;
}e[200005];
struct node{
	int num,w;
	inline bool operator<(const node &x)const{return w<x.w;}
};

void dijkstra(int s){
	priority_queue<node> q;
	dis[s]=0;
	q.push(node{s,0});
	while(!q.empty()){
		node v=q.top();
		q.pop();
		if(vis[v.num])continue;
		vis[v.num]=1;
		for(int i=head[v.num];i;i=e[i].next){
			if(dis[e[i].v]>dis[v.num]+e[i].w){
				dis[e[i].v]=dis[v.num]+e[i].w;
				if(!vis[e[i].v])q.push(node{e[i].v,dis[e[i].v]});
			}
		}
	}
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n,m,s;
	cin >> n >> m >> s;
	for(int i=1;i<=n;i++)dis[i]=0x7fffffff;
	for(int i=1;i<=m;i++){
		int u;
		cin >> u >> e[i].v >> e[i].w;
		e[i].next=head[u];
		head[u]=i;
	}
	dijkstra(s);
	for(int i=1;i<=n;i++)cout << dis[i] << " ";
	return 0;
}

自己瞎编了几个样例也能过,但只有#5 AC

2022/8/27 19:41
加载中...