Pagini recente » Cod sursa (job #2066709) | Cod sursa (job #902345) | Cod sursa (job #2228440) | Cod sursa (job #2756877) | Cod sursa (job #2184186)
#include<bits/stdc++.h>
#define x first
#define y second
#define NMAX 50010
using namespace std;
int d[NMAX];
struct cmp {
bool operator()(int l, int r) {
return d[l]>d[r];
}
};
const int inf=1e9;
priority_queue<int, vector<int>, cmp>Q;
vector<pair<int,int> >V[NMAX];
int n,m;
bool inQ[NMAX];
void Dijkstra(int x) {
for (int i=1; i<=n; i++) d[i]=inf;
Q.push(x); d[x]=0; inQ[x]=1;
while (!Q.empty()) {
x=Q.top(); Q.pop();
inQ[x]=0;
for (int i=0; i<V[x].size(); i++) {
int y=V[x][i].x;
int c=V[x][i].y;
if (d[x]+c<d[y]) {
d[y]=d[x]+c;
if (!inQ[y]) Q.push(y), inQ[y]=1;
}
}
}
}
int main() {
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
cin>>n>>m;
for (int i=1; i<=m; i++) {
int x,y,c; cin>>x>>y>>c;
V[x].push_back({y,c});
V[y].push_back({x,c});
}
Dijkstra(1);
for (int i=2; i<=n; i++) {
if (d[i]==inf) cout<<"0 ";
else cout<<d[i]<<" ";
}
return 0;
}