Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MAX 110
- using namespace std;
- int n, m;
- vector<array<int, 3>> edges;
- int pai[MAX], sz[MAX];
- int find(int x){
- if(pai[x] == x)
- return x;
- return pai[x] = find(pai[x]);
- }
- void join(int a, int b){
- a = find(a); b = find(b);
- if(a == b) return;
- if(sz[a] > sz[b]) swap(a, b);
- pai[a] = b;
- sz[b] += sz[a];
- }
- int main(){
- int f, r;
- cin >> n >> f >> r;
- for(int i = 0; i < f + r; i++){
- int u, v, w;
- cin >> u >> v >> w;
- edges.push_back({w, u, v});
- }
- for(int i = 1; i <= n; i++)
- pai[i] = i, sz[i] = 1;
- sort(edges.begin(), edges.begin() + f);
- sort(edges.begin() + f, edges.begin() + f + r);
- int cost = 0;
- for(int i = 0; i < edges.size(); i++) {
- auto [w, u, v] = edges[i];
- if(find(u) != find(v)){
- join(u, v);
- cost += w;
- }
- }
- cout << cost << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement