Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <iostream>
- #include <sstream>
- #include <string>
- #include <vector>
- #define MAX(a, b) ((a) > (b) ? (a) : (b))
- #define MIN(a, b) ((a) < (b) ? (a) : (b))
- #define __PAUSE system("pause");
- #define vec std::vector <
- #define in std::cin
- #define out std::cout
- typedef long long ll;
- constexpr ll INF = 1000000000;
- int main() {
- ll n, m;
- in >> n >> m;
- vec vec ll >> g(n, vec ll > (n, INF));
- for (ll i = 0; i < m; i++) {
- ll tmp1 = 0, tmp2 = 0, tmp3 = 0;
- in >> tmp1 >> tmp2 >> tmp3;
- g[tmp1 - 1][tmp2 - 1] = tmp3;
- g[tmp2 - 1][tmp1 - 1] = tmp3;
- }
- vec bool> used(n);
- vec ll> min_e(n, INF), sel_e(n, -1);
- min_e[0] = 0;
- ll ans = 0;
- for (ll i = 0; i < n; ++i) {
- int v = -1;
- for (ll j = 0; j < n; ++j)
- if (!used[j] && (v == -1 || min_e[j] < min_e[v])) v = j;
- if (min_e[v] == INF) {
- return 0;
- }
- used[v] = true;
- if (sel_e[v] != -1){
- ans += g[v][sel_e[v]];
- //out << v << " " << sel_e[v] << "\n";
- }
- for (ll to = 0; to < n; ++to)
- if (g[v][to] < min_e[to]) {
- min_e[to] = g[v][to];
- sel_e[to] = v;
- }
- }
- out << ans;
- __PAUSE
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement