Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- struct edge
- {
- int s, e, w;
- };
- bool operator<(const edge& a, const edge& b)
- {
- return a.w < b.w;
- }
- const int N = (int)1e5 + 100;
- int p[N];
- int sz[N];
- int find_set(int v)
- {
- if(p[v] == v)
- return v;
- return p[v] = find_set(p[v]);
- }
- int merge(int a, int b)
- {
- a = find_set(a);
- b = find_set(b);
- if(a == b)
- return 0;
- if(sz[a] < sz[b])
- swap(a, b);
- sz[a] += sz[b];
- p[b] = a;
- return 1;
- }
- int main()
- {
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- int nv, ne;
- cin >> nv >> ne;
- vector<edge> edges(ne);
- for(int i = 0; i < ne; i++)
- {
- cin >> edges[i].s >> edges[i].e >> edges[i].w;
- --edges[i].s;
- --edges[i].e;
- }
- for(int i = 0; i < nv; i++)
- {
- p[i] = i;
- sz[i] = 1;
- }
- long long res = 0;
- sort(edges.begin(), edges.end());
- for(int i = 0; i < ne; i++)
- {
- if(merge(edges[i].s, edges[i].e))
- {
- res += edges[i].w;
- }
- }
- cout << res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement