Cod sursa(job #2282646)

Utilizator I_am_not_a_robotMr Domino I_am_not_a_robot Data 14 noiembrie 2018 11:17:45
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

const int N=50000+5;

int n,m,dp[N],co;
vector<pair<int,int>>g[N];
priority_queue<pair<int,int>>q;
pair<int,int>x;

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    while(m--)
    {
        register int a,b,x;
        scanf("%d%d%d",&a,&b,&x);
        g[a].push_back({b,x});
    }
    for(register int i=2;i<=n;i++)
    {
        dp[i]=(1<<30);
    }
    q.push({0,1});
    while(!q.empty())
    {
        x=q.top();
        x.first=-x.first;
        q.pop();
        if(dp[x.second]==x.first)
        {
            for(auto &it:g[x.second])
            {
                co=x.first+it.second;
                if(co<dp[it.first])
                {
                    dp[it.first]=co;
                    q.push({-co,it.first});
                }
            }
        }
    }
    for(register int i=2;i<=n;i++)
    {
        if(dp[i]!=(1<<30))
        {
            printf("%d ",dp[i]);
        }
        else
        {
            printf("0 ");
        }
    }
    printf("\n");
    return 0;
}