首页 > 其他 > 详细

P3371 【模板】单源最短路径(弱化版)

时间:2019-04-24 19:55:38      阅读:231      评论:0      收藏:0      [点我收藏+]
// luogu-judger-enable-o2
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#define spfa zhx_ak_ioi

using namespace std;

const long long inf=2147483647;

long long n,m,s;
long long dis[10008],vis[10001],head[10001],num_edge=0;

struct Edge{
    long long next,to,dis;
}edge[500008]; 

queue <long long> q;

void addedge(long long from,long long to,long long dis)
{
    num_edge++;
    edge[num_edge].next=head[from];
    edge[num_edge].to=to;
    edge[num_edge].dis=dis;
    head[from]=num_edge; 
}

void spfa()
{
    for(long long i=1;i<=n;++i)
    {
        dis[i]=inf;
        vis[i]=0;
    }
    dis[s]=0;
    vis[s]=1;
    q.push(s);
    while(!q.empty())
    {
        long long u=q.front();
        q.pop();
        vis[u]=0;
        for(long long i=head[u];i;i=edge[i].next)
        {
            long long zhongdian=edge[i].to;
            if(dis[zhongdian]>dis[u]+edge[i].dis)
            {
                dis[zhongdian]=dis[u]+edge[i].dis;
                if(!vis[zhongdian])
                {
                    q.push(zhongdian);
                    vis[zhongdian]=1;
                }
            }
        }
    }
}

int main()
{
    scanf("%lld %lld %lld",&n,&m,&s);
    for(long long i=1;i<=m;++i)
    {
        long long u,v,w;
        scanf("%lld %lld %lld",&u,&v,&w);
        addedge(u,v,w);
    }
    spfa();
    for(long long i=1;i<=n;++i)
    {
        if(i==s) printf("0 ");
        else printf("%lld ",dis[i]);
    }
    return 0;
} 

 

P3371 【模板】单源最短路径(弱化版)

原文:https://www.cnblogs.com/lbssxz/p/10759128.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!