Nu aveti permisiuni pentru a descarca fisierul grader_test9.in
Cod sursa(job #2207550)
Utilizator | Data | 25 mai 2018 22:22:14 | |
---|---|---|---|
Problema | Algoritmul lui Dijkstra | Scor | 70 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.1 kb |
#include <iostream>
#include <vector>
#include <queue>
#include <cstdio>
#define NMAX 50010
#define inf 1<<30
using namespace std;
int dist[NMAX], N, M;
vector<int> G[NMAX],C[NMAX];
void Dijkstra(int nodStart) {
for(int i=1;i<=N;i++)
dist[i] = inf;
dist[nodStart] = 0;
queue<pair<int, int> > T;
T.push({nodStart, 0});
while(!T.empty()) {
int nod = (T.front()).first;
int val = (T.front()).second;
T.pop();//(T.begin());
for(int i=0;i < G[nod].size(); i++) {
if(dist[G[nod][i]] > val + C[nod][i]) {
dist[G[nod][i]] = C[nod][i] + val;
T.push({G[nod][i], C[nod][i] + val});
}
}
}
}
int main()
{
int a, b, c;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
cin>>N>>M;
for(int i=0; i< M;i++) {
cin>>a>>b>>c;
G[a].push_back(b);
C[a].push_back(c);
}
Dijkstra(1);
for(int i=2;i<=N;i++) {
if(dist[i]==inf) dist[i] = 0;
cout<<dist[i]<<" ";
}
}