Pagini recente » Cod sursa (job #1283645) | Cod sursa (job #2046009) | Cod sursa (job #355952) | Cod sursa (job #654856) | Cod sursa (job #1639648)
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
#include <cstring>
#define INF 0x3f3f3f3f
#define NMAX 50005
#define MMAX 100005
using namespace std;
int d[NMAX];
int Dijkstra(vector <pair<int, int> > v[MMAX], int n, int m, int sursa) {
queue <int> Q;
memset(d, INF, sizeof(d));
d[sursa] = 0;
Q.push(sursa);
int x;
while(!Q.empty()) {
x = Q.front();
Q.pop();
for(vector<pair<int, int> >::iterator it = v[x].begin();it!= v[x].end(); ++it) {
if(d[it->first] > d[x] + it->second)
{
d[it->first] = d[x] + it->second;
Q.push(it->first);
}
}
}
}
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int n,m;
vector< pair<int, int> > graf[MMAX];
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; i++) {
int a,b,c;
scanf("%d %d %d\n", &a, &b, &c), graf[a].push_back({b,c});
}
Dijkstra(graf, n, m, 1);
for(int i = 2; i <= n; i++)
printf("%d ", d[i] == INF ? 0 : d[i]);
return 0;
}