djikstra堆优化 WA了一个 RE了一个
查看原帖
djikstra堆优化 WA了一个 RE了一个
581107
poppingW楼主2023/7/7 15:45
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
const int N=2505,M=6205;
priority_queue<pair<int,int> ,vector<pair<int,int> >,greater<pair<int,int> > >q;
int n,m,s,e,u,v,w,dis[N],vis[N];
int head[N],to[M],nxt[M],val[M],idx;
void add(int u,int v,int w){
	to[idx]=v,val[idx]=w,nxt[idx]=head[u],head[u]=idx++;
}
void dijkstra(){
	memset(dis,0x3f,sizeof dis);
	dis[s]=0;
	q.push(make_pair(0,s));
	while(!q.empty()){
		int x=q.top().second;
		q.pop();
		if(vis[x]) continue;
		vis[x]=1;
		for(int j=head[x];~j;j=nxt[j]){
			int y=to[j];
			if(dis[y]>dis[x]+val[j]){
				dis[y]=dis[x]+val[j];
				q.push(make_pair(dis[y],y));
			}
		}
	}
}
int main(){
	memset(head,-1,sizeof head);
	memset(vis,0,sizeof vis);
	scanf("%d%d%d%d",&n,&m,&s,&e);
	for(int i=1;i<=m;++i){
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
		add(v,u,w);
	}
	dijkstra();
	printf("%d\n",dis[e]);
	return 0;
} 
2023/7/7 15:45
加载中...