[洛谷3371&&4779]【模板】单源最短路径

版权声明:请大家斧正,如喜欢的话,为拙见点一个赞吧。 https://blog.csdn.net/qq_39897867/article/details/84667483

题目

https://www.luogu.org/problemnew/show/P3371
[P3371 【模板】单源最短路径(弱化版)]
https://www.luogu.org/problemnew/show/P4779
P4779 【模板】单源最短路径(标准版)



代码标准版本(dij+堆优化)

#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
using namespace std;
const int N=100010,M=200010; 
struct node{int y,z,next;}a[M];
int head[N],n,m,tot,root,d[N]; bool v[N];
priority_queue<pair<int,int> >q; 
inline int read()
{
	int p=0; char c=getchar(); 
	while (!isdigit(c)) c=getchar(); 
	while (isdigit(c)) p=(p<<3)+(p<<1)+c-48,c=getchar(); 
	return p; 
}
void write(int x){if (x>9) write(x/10); putchar(x%10+48);}
void add(int x,int y,int z){a[++tot]=(node){y,z,head[x]}; head[x]=tot;}
void dijkstra()
{
	memset(d,0x3f,sizeof(d)); 
	memset(v,0,sizeof(v)); 
	d[root]=0; q.push(make_pair(0,root)); 
	while (q.size()){
		int x=q.top().second; q.pop(); 
		if (v[x]) continue; v[x]=1;
		for (int i=head[x];i;i=a[i].next){
			int y=a[i].y,z=a[i].z; 
			if (d[y]>d[x]+z) {
				d[y]=d[x]+z; 
				q.push(make_pair(-d[y],y)); 
			}
		}
	}
}
int main()
{
	n=read(),m=read(),root=read(); 
	for (int i=1;i<=m;i++)
	 {
	 	 int x=read(),y=read(),z=read(); 
		 add(x,y,z); 
	 } 
	dijkstra(); 
	for (int i=1;i<=n;putchar(' '),++i) write(d[i]); 
}

猜你喜欢

转载自blog.csdn.net/qq_39897867/article/details/84667483
今日推荐