Cod sursa(job #2184186)

Utilizator DimaTCDima Trubca DimaTC Data 23 martie 2018 20:15:37
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#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;
}