qwq 83pts求助
查看原帖
qwq 83pts求助
552610
__Shine__楼主2023/7/15 09:06
#include<bits/stdc++.h>
using namespace std;
const long long N=1e6+10;
const long long M=1e6+10;
long long n,m,tot,s,head[N],d[N];
bool v[N];
struct edge {
	long long to, w,nxt;
} e[M];
priority_queue< pair<long long ,long long> >q;
inline void add(long long u,long long v,long long w) {
	e[++tot].to = v ;
	e[tot].w = w ;
	e[tot].nxt = head[u] ;
	head[u] = tot ;
}
void dijkstra() {
	for(long long i=1; i<=n; i++)
		d[i]=0x3f3f3f3f;
	d[s]=0;
	q.push(make_pair(0,s));
	while(q.size()) {
		long long u=q.top().second;
		q.pop();
		if(v[u]) continue;
		v[u] = 1 ;
		for(long long i=head[u]; i!=0; i=e[i].nxt) {
			long long v=e[i].to,w=e[i].w;
			if(d[v] > d[u] + w) {
				d[v] = d[u] + w;
				q.push(make_pair(-d[v],v));
			}
		}
	}
}
int main() {
	//first距离 second点号
	cin>>n>>m;
	s=n+1;
	for(long long i=1; i<=m; i++) {
		long long u,v,w;
		cin>>u>>v>>w;
		add(u,v,w*2);
		add(v,u,w*2);
	}
	for(long long i=1;i<=n;i++)
	{
		long long w;
		cin>>w;
		add(s,i,w);
	}
	dijkstra();
	for(long long i=1; i<=n; i++)
		cout<<d[i]<<" ";
	return 0;
}
2023/7/15 09:06
加载中...