Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- int n, m;
- int i, j;
- vector<long long> p(n);
- void make_set(){
- for(i = 0; i < n; i++){
- p[i] = i;
- }
- }
- int get_parent(long long v){
- return (v == p[v]) ? v : (p[v] = get_parent(p[v]));
- }
- void unite(long long a, long long b){
- a = get_parent(a);
- b = get_parent(b);
- swap(a, b);
- if(a != b){
- p[a] = b;
- }
- }
- int main() {
- // your code goes here
- cin >>n >>m;
- long long sum = 0;
- p.assign(n, 0);
- make_set();
- /*for(i = 0; i < n; i++){
- cout <<p[i] <<' ';
- }
- cout <<endl;*/
- vector < pair < long long, pair<long long, long long> > > g; // вес - вершина 1 - вершина 2
- for (i = 0; i < m; i++) {
- long long x, y, z;
- cin >>x >>y >>z;
- x--; y--;
- sum += z;
- z = z * (-1);
- g.push_back(make_pair(z, make_pair(x, y)));
- /* long long a = g[i].second.first, b = g[i].second.second, l = g[i].first;
- cout <<a <<' ' <<b <<' ' <<l <<endl;*/
- }
- long long cost = 0;
- vector < pair<long long, long long> > res;
- sort (g.begin(), g.end());
- for (i = 0; i < m; i++) {
- long long a = g[i].second.first, b = g[i].second.second, l = g[i].first;
- //cout <<a <<' ' <<b <<' ' <<l <<endl;
- if (get_parent(a) != get_parent(b)) {
- cost += l;
- res.push_back (g[i].second);
- unite (a, b);
- }
- }
- cout <<sum + cost;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement