Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma comment(linker, "/STACK:189721600")
- #include <iostream>
- #include <fstream>
- #include <set>
- #include<iterator>
- #include<vector>
- #include <functional>
- #include<queue>
- using namespace std;
- int main() {
- ifstream fin("input.txt");
- int n, m;
- fin >> n;
- fin >> m;
- ofstream fout("output.txt");
- pair<int, int> p;
- int x;
- vector<long long> d(n + 1, ULONG_MAX);
- struct Node
- {
- int v;
- long long len;
- Node(int v, long long len)
- {
- this->v = v;
- this->len = len;
- }
- bool operator >(const Node &n) const
- {
- return len > n.len;
- }
- };
- int y, h;
- vector<pair<int, int>> vct[200002];
- priority_queue<Node, vector<Node>, greater<Node> > q;
- for (int i = 0; i < m; i++) {
- fin >>x>> y >> h;
- vct[x].push_back(make_pair(y, h));
- vct[y].push_back(make_pair(x, h));
- }
- int flags[200001];
- d[1] = 0;
- q.push(Node(1, 0));
- for (int i = 1; i < n+1; i++)
- {
- flags[i] = false;
- }
- while (!q.empty())
- {
- Node node = q.top();
- q.pop();
- if (!flags[node.v])
- {
- flags[node.v] = true;
- for (auto j : vct[node.v])
- {
- if (node.len != ULONG_MAX &!flags[j.first] && node.len + j.second < d[j.first])
- {
- d[j.first] = node.len + j.second;
- q.push(Node(j.first, d[j.first]));
- }
- }
- }
- }
- fout << d[n];
- fout.close();}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement