Cod sursa(job #1466748)

Utilizator Tester01tester Tester01 Data 30 iulie 2015 09:27:00
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.64 kb
#include <bits/stdc++.h>
using namespace std;
#define nod first
#define weight second
#define inf 9223372036854775807LL
int from,to,cost,n,m;
vector <int> sol;
long long d[50013]; 

class undirected_graf
      {
    private :
            vector < pair <int,int> > G[100013];
            bool used[100013];
            struct cmp{
                bool operator()(const int &a,const int &b){
                   return d[a]>d[b];
                  }
                };
    public :
         void add (int from, int to, int cost){
           G[from].push_back(make_pair(to,cost));
           swap(from,to);
           G[from].push_back(make_pair(to,cost));
          }

       long long Dijkstra(int sursa){
           priority_queue <int, vector <int>, cmp> Heap;

           for (int i=2;i<=n;++i) d[i]=inf;
           d[sursa]=0; 
           Heap.push(sursa);
           while(!Heap.empty()){
            int from=Heap.top();
            Heap.pop();
            vector < pair <int,int> >::iterator it;
            for (it=G[from].begin();it!=G[from].end();++it){
               int to=it->nod;
               if (d[to]> d[from] + it->weight)
                    {
                    d[to]=d[from]+it->weight; 
                    Heap.push(to);
                    }
              }
            }
           for (int i=2;i<=n;++i) cout<<d[i]<<" ";
          } 
      };
undirected_graf Graf;

int main(void){  
 ifstream cin("dijkstra.in");
 ofstream cout("dijkstra.out");
 cin>>n>>m;
 for (int i=1;i<=m;++i){
    cin>>from>>to>>cost;
    if (from!=to) Graf.add(from,to,cost);
   }
 Graf.Dijkstra(1); 
 return 0;
}