Cod sursa(job #3237547)

Utilizator BogdanBurescuBogdan Burescu BogdanBurescu Data 9 iulie 2024 21:44:52
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>
#include <set>

using namespace std;

ifstream cin ("dijkstra.in");
ofstream cout ("dijkstra.out");

long long int t,n,i,j,d,k,m,x,y,a,b,c,ans[300005],ok[300005],u,v,w,sum,l,r,mini,nr,maxi,node;
const int MOD=1e9+7;
vector<pair<int,int>>graf[300005];
set<pair<int,int>>s;

void dijkstra()
{
    ans[1]=0;
    s.insert({0,1});
    while(!s.empty())
    {

        set<pair<int,int>> :: iterator it=s.begin();
        node=it->second;
        s.erase(it);
        if(ok[node]==1)
            continue;
        ok[node]=1;
        for(i=0;i<graf[node].size();i++)
        {

            c=graf[node][i].first;
            x=graf[node][i].second;
            if(ok[x]==0 && ans[node]+c<ans[x])
            {
                ans[x]=ans[node]+c;
                s.insert({ans[x],x});
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n>>m;
    for(i=1; i<=n; i++)
        ans[i]=1e9;
    for(i=1; i<=m; i++)
    {
        cin>>a>>b>>c;
        graf[a].push_back({c,b});
    }
    dijkstra();
    for(i=2; i<=n; i++)
    {
        if(ans[i]==1e9)
            ans[i]=0;
        cout<<ans[i]<<' ';
    }
    return 0;
}