Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<vector>
- #include<algorithm>
- using namespace std;
- struct D{
- int x,y,dis;
- };
- bool cmp(D u, D v){
- return u.dis < v.dis;
- }
- vector<int> a;
- vector<D> x;
- int root(int n)
- {
- if(a[n]!=n)return a[n]=root(a[n]);
- return a[n];
- }
- int main()
- {
- int n,m;
- while(scanf("%d%d",&n,&m)!=EOF)
- {
- int cnt=0;
- long long d=0;
- a.resize(n);
- x.resize(m);
- for(int i=0;i<n;i++)a[i]=i;
- for(int i=0;i<m;i++)
- {
- scanf("%d%d%d",&x[i].x,&x[i].y,&x[i].dis);
- //if(x[i].x>x[i].y)swap(x[i].x,x[i].y);
- }
- sort(x.begin(),x.end(), cmp);
- for(int i=0;i<m;i++)
- {
- int r_x=root(x[i].x),r_y=root(x[i].y),m=min(r_x,r_y);
- if(r_x==r_y)continue;
- else
- {
- cnt++;
- d+=(long long)x[i].dis;
- a[r_x] = r_y;
- }
- if(cnt==n-1)break;
- }
- if(cnt<n-1)puts("-1");
- else printf("%lld\n",d);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement