关于Dijkstra板子求助(连了双向边,开了LL)
  • 板块CF20C Dijkstra?
  • 楼主Hsl123456
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/8/8 18:57
  • 上次更新2023/10/27 16:24:47
查看原帖
关于Dijkstra板子求助(连了双向边,开了LL)
531924
Hsl123456楼主2022/8/8 18:57
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<ios>
#include<iostream>
#include<float.h>
#include<map>
#include<string>
#include<queue>
#include<vector>
#define pi pair<long,long>
#define int long long 

using namespace std;

struct graph{
	int to,w;
};
vector<graph> G[100005];
void addedge(int u,int v,int to){
	G[u].push_back((graph){v,to});
	return;
}
priority_queue<pi, vector<pi>, greater<pi> > pq;
int dis[100005];
bool flag[100005];
void Dijkstra(int u){
	memset(dis,0x3f,sizeof(dis));
	memset(flag,0,sizeof(flag));
	dis[u]=0;
	pq.push(make_pair(0,u));
	while(!pq.empty()){
		pi sum=pq.top();
		pq.pop();
		if(flag[sum.second])continue;
		else flag[sum.second]=1;
		int v=sum.second;
		for(int j=0;j<G[v].size();j++){
			graph&e=G[v][j];
			if(dis[e.to]>dis[v]+e.w){
				dis[e.to]=dis[v]+e.w;
				pq.push(make_pair(dis[e.to],e.to));
			}
		}
	}
	return;
}

signed main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		addedge(u,v,w);
		addedge(v,u,w);
	}
	Dijkstra(1);
	for(int i=2;i<=n;i++){
		if(dis[i]==0x3f3f3f3f)cout<<-1<<" ";
		else cout<<dis[i]<<" ";
	}
	cout<<endl;
	return 0;
}

救救蒟蒻呗qwq

2022/8/8 18:57
加载中...