Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#include<bits/stdc++.h>
- #include<iostream>
- #include<fstream>
- #include<vector>
- #include<queue>
- #include<algorithm>
- #define long long long
- #define nln '\n'
- const long N = 110;
- using namespace std;
- //GLobal variables: f1, f2, n, m,, k, mat, q, a, b
- fstream f1;
- vector<vector<pair<long, long>>> mat(N);
- vector<long> a, b, q;
- long n, m, k;
- void data()
- {
- f1.open("dijkstra.inp", ios:: in);
- cin >> n >> m >> k;
- for (long i = 1; i <= m; ++i)
- {
- long x, y, z;
- cin >> x >> y >> z;
- mat[x].push_back({z, y});
- mat[y].push_back({z, x});
- }
- a.resize(k+1, 0);
- b.resize(k+1, 0);
- q.resize(k+1, 0);
- for (long i = 1; i <= k; ++i)
- cin >> q[i] >> a[i] >> b[i];
- f1.close();
- }
- void dijkstra(long sta, long fin, long que)
- {
- vector<long> cos, tra;
- cos.resize(n+1, 1e9);
- cos[sta] = 0;
- tra.resize(n+1, 0);
- priority_queue<pair<long, long>, vector<pair<long, long>>, greater<pair<long, long>>> pqu;
- pqu.push({0, sta});
- vector<bool> pic(n+1, 0);
- while (!pqu.empty())
- {
- long des = pqu.top().second;
- pqu.pop();
- if (pic[des])
- continue;
- pic[des] = 1;
- for (const auto &i : mat[des])
- if (!pic[i.second] && cos[i.second] > cos[des] + i.first)
- {
- cos[i.second] = cos[des] + i.first;
- tra[i.second] = des;
- pqu.push({cos[i.second], i.second});
- }
- }
- if (que == 1)
- {
- vector<long> ans;
- ans.push_back(fin);
- while (fin != sta)
- {
- fin = tra[fin];
- ans.push_back(fin);
- }
- cout << ans.size() << ' ';
- reverse(ans.begin(), ans.end());
- for (const auto &i : ans)
- cout << i << ' ';
- cout << nln;
- }
- else
- cout << cos[fin] << nln;
- }
- void process()
- {
- for (long i = 1; i <= k; ++i)
- dijkstra(a[i], b[i], q[i]);
- }
- int main()
- {
- data();
- process();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment