Cod sursa(job #1745562)

Utilizator Juve45UAIC Alexandru Ionita Juve45 Data 22 august 2016 11:15:05
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
#include <set>

using namespace std;

int costminim[60000];
int n,m,i,j;

struct cmp
{
    bool operator() (const int a, const int b)
    const {
        if(costminim[a]==costminim[b])
            return a<b;
        return  costminim[a]<costminim[b];

    }
};

vector <int> v[60000],cost[60000];
bool use[60000];
set <int,cmp> s;

int main()
{
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out","w",stdout);
    cin>>n>>m;
    for (i=2; i<=n; i++)
        costminim[i]=50000001;
    for (i=1; i<=m; i++)
    {
        int a,b,c;
        scanf("%d%d%d", &a, &b, &c);
        v[a].push_back(b);
        cost[a].push_back(c);
    }
s.insert(1);
while (!s.empty())
{
    int x=*s.begin();
    s.erase(s.begin());
    for (int i=0; i<v[x].size(); i++)
    {
        if (costminim[x]+cost[x][i]<costminim[v[x][i]])
        {
            //if(s.find(v[x][i])!=s.end())
                s.erase(v[x][i]);
            costminim[v[x][i]]=costminim[x]+cost[x][i];
            s.insert(v[x][i]);
        }
    }
}
for (int i=2; i<=n; i++)
    if(costminim[i]!=50000001)
    printf("%d ",costminim[i]);
else printf("0 ");
    printf("\n");
    return 0;
}