Cod sursa(job #1005558)

Utilizator ThomasFMI Suditu Thomas Thomas Data 5 octombrie 2013 11:47:15
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<fstream>
#include<cstdio>
#include<vector>
#include<queue>

using namespace std;

#define pp pair<int,int>
#define inf 1001
#define Nmax 50001

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

struct pri
{
    int operator() (const pair<int,int>&p1,const pair<int,int>&p2)
    {
        return p1.second<p2.second;
    }
}p;

priority_queue<pp,vector<pp>,pri> q;

int n,m,u,v,w,i;
int d[Nmax];

int main()
{
    f>>n>>m;
    vector<pp> h[n+1];

    for(i=0;i<m;i++)
    {
        f>>u>>v>>w;
        h[u].push_back(pp(v,w));
        h[v].push_back(pp(u,w));
    }

    for(i=2;i<=n;i++) d[i]=inf;
    d[1]=0;

    q.push(pp(1,d[1]));
    while(!q.empty())
    {
        u=q.top().first;
        q.pop();
        int hsize=h[u].size();
        for(int i=0;i<hsize;i++)
        {
            v=h[u][i].first;
            w=h[u][i].second;

            if(d[v]>d[u]+w)
            {
                d[v]=d[u]+w;
                q.push(pp(v,d[v]));
            }
        }
    }

    for(i=2;i<=n;i++) if(d[i]==inf) g<<"0 "; else g<<d[i]<<" ";
    g<<"\n";

    f.close();
    g.close();
    return 0;
}