dijkstra优化模板为什么错了?
  • 板块灌水区
  • 楼主Mr_yeh
  • 当前回复12
  • 已保存回复12
  • 发布时间2024/1/21 13:13
  • 上次更新2024/1/21 15:54:41
查看原帖
dijkstra优化模板为什么错了?
852827
Mr_yeh楼主2024/1/21 13:13
#include<bits/stdc++.h>
using namespace std;
const int N=(int)1e5+10;
const int INF=(int)1e9+10;
int n,head[N],nxt[N*2],to[N*2];
long long w[N*2];
int cnt=0;
long long d[N];
struct node{
	long long dis;
	int u;
	bool operator <(const node &cmp)const{
		return dis>cmp.dis;
	}
};
priority_queue<node>q;
void add(int a,int b,long long c){
	to[cnt]=b;
	w[cnt]=c;
	nxt[cnt]=head[a];
	head[a]=cnt;
	cnt++;
}
void dijkstra(){
	for(int i=1;i<=n;i++) d[i]=INF;
	d[1]=0;
	node t;
	t.u=1;t.dis=0;
	q.push(t);
	while(!q.empty()){
		node t=q.top();
		q.pop();
		int u=t.u;
		if(t.dis>d[t.u]){
			t.dis=d[t.u];
			continue;
		}
		for(int i=head[u];i!=-1;i=nxt[i]){
			int v=to[i];
			if(d[u]+w[i]<d[v]){
				d[v]=d[u]+w[i];
				node s;
				s.u=v;
				s.dis=d[v];
				q.push(s);
			}
		}
	}
	if(d[n]!=INF) printf("%lld\n",d[n]);
	else printf("-1\n");
}
int main(){
	int m;
	scanf("%d%d",&n,&m);
	memset(head,-1,sizeof(head));
	while(m--){
		int a,b;
		long long c;
		scanf("%d%d%lld",&a,&b,&c);
		add(a,b,c);
		add(b,a,c);
	}
	dijkstra();
	return 0;
} 
2024/1/21 13:13
加载中...