Cod sursa(job #2476395)

Utilizator rebecca0312Andrei Rebecca rebecca0312 Data 18 octombrie 2019 19:34:49
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include<cstdio>
#include<vector>
#include<set>

#define INF 1<<24
#define x first
#define y second

using namespace std;

int main(){
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
	int n,m;
	scanf("%d%d", &n, &m);
	vector <vector <pair<int, int> > > G(n+1);
	vector <int> d(n+1, INF);
	set <pair <int, int> > q;
	for(int i=1;i<=m;i++){
		int x,y,c;
        scanf("%d%d%d", &x, &y, &c);
		G[x].push_back(make_pair(c, y));
	}
	d[1]=0;
	q.insert(make_pair(0, 1));
	while(!q.empty()){
		int nod=(*q.begin()).y;
		q.erase(q.begin());
		for(auto j: G[nod]){
			if(d[nod]+j.x<d[j.y]){
				q.erase(make_pair(d[j.y], j.y));
				d[j.y]=d[nod]+j.x;
				q.insert(make_pair(d[j.y], j.y));
			}
		}
	}
	for(int i=2;i<=n;i++){
		if(d[i]==INF)
            printf("0 ");
		else
            printf("%d ", d[i]);
	}
	return 0;
}