Cod sursa(job #2195670)

Utilizator PredaBossPreda Andrei PredaBoss Data 17 aprilie 2018 08:49:48
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
#define INF 1e9
using namespace std;
vector<pair<unsigned short,unsigned short> >frunza[50005],tulpina[50005];
int mn[50005];
int n,m,x,y,l;
void calc(int pos)
{
    int MN=INF;
    for(int i=0;i<tulpina[pos].size();i++)
    {
        if(mn[tulpina[pos][i].first]==INF)
        calc(tulpina[pos][i].first);
        if(mn[tulpina[pos][i].first]+tulpina[pos][i].second<MN)
            MN=mn[tulpina[pos][i].first]+tulpina[pos][i].second;
    }
    mn[pos]=MN;
}
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&x,&y,&l);
        frunza[x].push_back({y,l});
        tulpina[y].push_back({x,l});
    }
    for(int i=2;i<=n;i++)
        mn[i]=INF;
    for(int i=2;i<=n;i++)
    {
        if(mn[i]==INF)
            calc(i);
        printf("%d ",mn[i]);
    }
    return 0;
}