Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include <stdio.h>
- #include <cstring>
- #include <vector>
- #include <algorithm>
- #include <utility>
- #include <queue>
- #include <map>
- #include <stack>
- #include <cmath>
- #include <set>
- #include <ctype.h>
- #include <bitset>
- #define INF 0x3F3F3F3F
- #define rep(i, a, b) for (int i = int(a); i < int(b); i++)
- #define pb push_back
- #define clr(a) memset((a),0,sizeof(a))
- #define pi 3.1415926535897932384626433832795028841971
- #define debug(x) cout << #x << " = " << x << endl;
- #define debug2(x,y) cout << #x << " = " << x << " --- " << #y << " " << y << "\n";
- #define all(S) (S).begin(), (S).end()
- #define MAXV 1005
- #define F first
- #define S second
- #define EPS 1e-9
- #define mp make_pair
- // freopen("in.txt", "r", stdin);
- // freopen("out.txt", "w", stdout);
- using namespace std;
- typedef long long ll;
- typedef pair < int, int > ii;
- typedef vector < int > vi;
- typedef vector < ii > vii;
- #define MAX 10000+10
- int pai[MAX], sz[MAX];
- int cost;
- int find(int i){
- if (i != pai[i]) pai[i] = find(pai[i]);
- return pai[i];
- }
- void join(int a, int b, int c){
- a= find(a); b = find(b);
- if (a != b){
- if(sz[a] < sz[b]) swap(a,b);
- pai[b] = a;
- sz[a] += sz[b];
- }else cost += c;
- }
- bool comp(pair<int,ii> A, pair<int,ii> B){
- return A.first > B.first;
- }
- int main(){
- int t, n, m, a, b, c;
- vector<pair<int, pair<int,int> > > edges;
- scanf("%d", &t);
- while (t--){
- scanf("%d %d",&n, &m);
- rep(i,0,n+2)
- pai[i] = i, sz[i] = 1;
- edges.clear();
- rep(i,0,m){
- scanf("%d %d %d", &a, &b, &c);
- edges.pb( mp(c,ii(a,b)));
- }
- sort( all(edges), comp);
- cost = 0;
- rep(i,0,m){
- a = edges[i].second.first; b = edges[i].second.second;
- c = edges[i].first;
- join(a,b,c);
- }
- printf("%d\n", cost);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment