【模板】单源最短路径(标准版)

#include <bits/stdc++.h>
using namespace std;
const int mn=1e5+7;
const int mm=2e5+7;
int fr[mn],nx[mm],to1[mm],to2[mm],tot=0,dis[mn],tt=0;
bool p[mn];
priority_queue< pair<int,int> > q;
void add(int x,int y,int v)
{
	++tot;
	nx[tot]=fr[x];
	fr[x]=tot;
	to1[tot]=y;to2[tot]=v;
}
int main()
{
	int n,m,s;
	cin>>n>>m>>s;
	for(int i=1;i<=m;++i)
	{
		int x,y,v;
		scanf("%d%d%d",&x,&y,&v);
		add(x,y,v);
	}
	memset(dis,63,sizeof(dis));
	dis[s]=0;
	q.push(make_pair(0,s));
	while(q.size())
	{
		int x=q.top().second;q.pop();
		if(p[x])  continue;
		p[x]=1;
		for(int j=fr[x];j;j=nx[j])
		{
			int y=to1[j],v=to2[j];
			//if(p[y])  continue;
			if(dis[y]>v+dis[x])
			{
				dis[y]=v+dis[x];
				q.push(make_pair(-dis[y],y));
			}
		}
	}
	for(int i=1;i<=n;++i)
	{
		cout<<dis[i]<<" ";
	}
	return 0;
}
上一篇:P3919 【模板】可持久化线段树 1(可持久化数组)


下一篇:牛客题霸--买卖股票的最好时机