洛谷 3371

来源:互联网 发布:windows 卡在欢迎界面 编辑:程序博客网 时间:2024/06/18 13:13

【题目分析】
模板


【代码】

#include <cstdio>#include <cstring>#include <queue>using namespace std;queue <int> q;int n,m,S;int h[500001],to[500001],ne[500001],w[500001],en=0;int dis[500001],inq[500001];inline void add(int a,int b,int c){to[en]=b;ne[en]=h[a];w[en]=c;h[a]=en++;}inline void SPFA(){    memset(dis,0x3f,sizeof dis);    dis[S]=0;    inq[S]=1;    q.push(S);    while (!q.empty())    {        int x=q.front(); q.pop(); inq[x]=0;        for (int i=h[x];i>=0;i=ne[i])        {            if (dis[to[i]]>dis[x]+w[i])            {                dis[to[i]]=dis[x]+w[i];                if (!inq[to[i]])                {                    inq[to[i]]=1;                    q.push(to[i]);                }            }        }    }    for (int i=1;i<=n;++i) printf("%d%c",dis[i]==0x3f3f3f3f?2147483647:dis[i],i!=n?' ':'\n');}int main(){    memset(h,-1,sizeof h);    scanf("%d%d%d",&n,&m,&S);    for (int i=1;i<=m;++i)    {        int a,b,c;        scanf("%d%d%d",&a,&b,&c);        add(a,b,c);    }    SPFA();}
0 0
原创粉丝点击