PTA7-13校园建设
一、题目描述

二、解题思路
kruscal模板题
三、代码实现
1 #include "bits/stdc++.h" 2 #define PII pair<int,int> 3 #define rep(i,z,n) for(int i = z;i <= n; i++) 4 #define per(i,n,z) for(int i = n;i >= z; i--) 5 #define ll long long 6 #define db double 7 #define vi vector<int> 8 #define debug(x) cerr << "!!!" << x << endl; 9 using namespace std; 10 inline ll read() 11 { 12 ll s,r; 13 r = 1; 14 s = 0; 15 char ch = getchar(); 16 while(ch < '0' || ch > '9'){ 17 if(ch == '-') 18 r = -1; 19 ch = getchar(); 20 } 21 while(ch >= '0' && ch <= '9'){ 22 s = (s << 1) + (s << 3) + (ch ^ 48); 23 ch = getchar(); 24 } 25 return s * r; 26 } 27 inline void write(ll x) 28 { 29 if(x < 0) putchar('-'),x = -x; 30 if(x > 9) write(x / 10); 31 putchar(x % 10 + '0'); 32 } 33 const int inf = 1e9 + 10; 34 struct node{ 35 int u; 36 int v; 37 int w; 38 }e[111111]; 39 int a[1100]; 40 int n,m; 41 int cnt; 42 bool cmp(node a,node b) 43 { 44 return a.w < b.w; 45 } 46 int find(int u) 47 { 48 return u == a[u] ?u:a[u] = find(a[u]); 49 } 50 int main() 51 { 52 n = read(); 53 m = read(); 54 for(int i = 1;i <= n;i++) 55 a[i] = i; 56 for(int i = 1;i <= m;i++){ 57 int u,v,w; 58 u = read(); 59 v = read(); 60 w = read(); 61 e[cnt].u = u; 62 e[cnt].v = v; 63 e[cnt].w = w; 64 cnt++; 65 e[cnt].u = v; 66 e[cnt].v = u; 67 e[cnt].w = w; 68 cnt++; 69 } 70 sort(e,e + cnt,cmp); 71 int cnt1 = 0; 72 int ans = 0; 73 for(int i = 1;i <= cnt;i++){ 74 int sx = e[i].u; 75 int sy = e[i].v; 76 if(find(sx) != find(sy)){ 77 a[find(sx)] = find(sy); 78 cnt1++; 79 ans+=e[i].w; 80 } 81 if(cnt1 == n - 1) 82 break; 83 } 84 if(cnt1 < n - 1) 85 cout << -1 << endl; 86 else 87 cout << ans; 88 return 0; 89 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}

浙公网安备 33010602011771号