Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2014
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <set>
  5. #include <utility>
  6. #include <algorithm>
  7. using namespace std;
  8.  
  9. vector<long long> parent;
  10. vector<pair<long long, pair<long long, long long> > > graph;
  11.  
  12. long long find_parent(long long node) {
  13.     if (node != parent[node])
  14.         parent[node] = find_parent(parent[node]);
  15.     return parent[node];
  16. }
  17.  
  18. int main() {
  19.     long long N, M;
  20.     cin >> N >> M;
  21.     for (int i = 0; i <= N; i++)
  22.         parent.push_back(i);
  23.     for (long long i = 0; i < M; i++) {
  24.         long long from, to, cost;
  25.         cin >> from >> to >> cost;
  26.         pair<long long, long long> edge(from, to);
  27.         graph.push_back(pair<long long, pair<long long, long long> >(-cost, edge));
  28.     }
  29.     set<long long> nodes_visited;
  30.     int visited_count = 0;
  31.     long long cost = 0;
  32.     sort(graph.begin(), graph.end());
  33.     for (long long i = 0; i < graph.size() && nodes_visited.size() != N; i++) {
  34.         long long p1, p2;
  35.         p1 = find_parent(graph[i].second.first);
  36.         p2 = find_parent(graph[i].second.second);
  37.         if (p1 != p2) {
  38.             cost += graph[i].first;
  39.             visited_count++;
  40.             parent[p1] = parent[p2];
  41.             //for (int i = 1; i < parent.size(); i++) cout << parent[i] << " "; cout << "\n";
  42.         }
  43.     }
  44.     if (visited_count != N - 1) cout << "-1" << "\n";
  45.     else cout << -cost << "\n";
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement