Cod sursa(job #2611123)

Utilizator mzzmaraMara-Ioana Nicolae mzzmara Data 6 mai 2020 14:24:02
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.59 kb
#include <bits/stdc++.h> 

const int kNmax = 50009;

struct Edge {
	int x;
	int y;
};

class Task {
 public:
	void solve() {
		read_input();
        get_result();
	}

 private:
	int n;
	int m;
	std::vector<std::pair<int, int>> adj[kNmax];
   
	void read_input() {
		std::ifstream fin("dijkstra.in");
		fin >> n >> m;
		for (int i = 1, x, y, cost; i <= m; i++) {
			fin >> x >> y >> cost;
			adj[x].push_back(std::pair<int, int>(cost, y));
        }

		fin.close();
	}

	void get_result() {
        std::vector<int> distances(n + 1, INT_MAX); 
        std::priority_queue <std::pair<int, int>, std::vector<std::pair<int, int>>, 
            std::greater<std::pair<int, int>>> pq;
        std::pair<int, int> elem(0, 1);
        pq.push(elem);
        distances[1] = 0; 

        while (!pq.empty()) { 
            int node = pq.top().second;
            pq.pop();
           
            for (auto& it : adj[node]) {
                int adj = it.second;
                int cost = it.first;
              
                if (distances[adj] > distances[node] + cost) { 
                    distances[adj] = distances[node] + cost;
                    std::pair<int, int> newElem(distances[adj], adj);
                    pq.push(newElem);
                } 
            } 
        }

        std::ofstream fout("dijkstra.out");
		for (int i = 2; i <= n; i++) {
            if (distances[i] == INT_MAX) {
                fout << "0 ";
            } else {
                fout << distances[i] << " ";
            }
        }
		fout.close();
	}
};

int main() {
	Task *task = new Task();
	task->solve();
	delete task;
	return 0;
}