Cod sursa(job #1570012)

Utilizator TheFFOFratila Florin Ovidiu TheFFO Data 16 ianuarie 2016 09:52:03
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>

#define NMAX 50005
#define INF 0x3f3f3f3f

using namespace std;

int n,m,cost[NMAX],v[NMAX];
vector<pair<int,int> > g[NMAX];
queue<int> q;

void read()
{
    int a,b,c;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;++i)
    {
        scanf("%d%d%d",&a,&b,&c);
        g[a].push_back(make_pair(b,c));
        g[b].push_back(make_pair(a,c));
    }
    memset(cost,INF,sizeof(cost));
    cost[1]=0;
    q.push(1);
    v[1]=1;
}

void solve()
{
    int a;
    vector<pair<int,int> >::iterator it;
    while(!q.empty())
    {
        a=q.front();
        q.pop();
        //v[a]=0;
        v[a]=1;
        for(it=g[a].begin();it!=g[a].end();++it)
        {
            if(cost[it->first]>cost[a]+it->second)
            {
                cost[it->first]=cost[a]+it->second;
                if(!v[it->first])
                {
                    q.push(it->first);
                    //v[it->first]=1;
                }
            }
        }
    }
}

void print()
{
    int i;
    for(i=2;i<=n;++i)
        if(cost[i]!=INF)
            printf("%d ",cost[i]);
        else
            printf("0 ");
    printf("\n");
}

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    read();
    solve();
    print();
    return 0;
}