最短路Dijkstra求助,写的优化
查看原帖
最短路Dijkstra求助,写的优化
363145
Dino_Andy233楼主2022/8/17 10:50

WA #2, 3, 9, 10

#include<bits/stdc++.h>
#define inf 1e9 
using namespace std;
const int N=5e5+10,M=1e4+10;
int n,m,s;
bool v[M];
int dist[N];/*a[M][M]*/
struct Edge{
	int u,v,w,next;
}a[M];
int head[N],tot,vis[N],dis[N];
struct node{
	int w,now;
	inline bool operator<(const node &x)const
	{
		return w>x.w;
	}
};
priority_queue<node> q;

//前向星 
void add(int u,int v,int w){
	a[++tot].u=u;a[tot].v=v;a[tot].w=w;
	a[tot].next=head[u];
	head[u]=tot;
}

void dijkstra(){
	for(int i=1;i<=n;i++) dis[i]=inf;
	dis[s]=0;
	q.push((node){0,s});
	while(!q.empty()){
		node x=q.top();q.pop();
		int u=x.now; //堆顶,弹出(堆内最小的边) 
		if(vis[u]) continue;
		vis[u]=1;
		for(int i=head[u];i;i=a[i].next){
			int v=a[i].v;
			if(dis[v]>dis[u]+a[i].w){
				dis[v]=dis[u]+a[i].w;
				q.push((node){dis[v],v});
			}
		}
	}
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);
	}
	dijkstra();
	for(int i=1;i<=n;i++) cout<<dis[i]<<' ';
	return 0;
}
2022/8/17 10:50
加载中...