Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define F first
  4. #define S second
  5. vector<pair <long long,pair<int,int> > >v;
  6. pair <int,long long> x[300005],y[300005],z[300005];
  7. int n,m,par[300005];
  8. long long ans;
  9. int findparent (int x)
  10. {
  11.     if (x==par[x])
  12.         return x;
  13.     return par[x]=findparent (par[x]);
  14. }
  15. bool unun(int n1,int n2)
  16. {
  17.     int x1=findparent(n1);
  18.     int x2=findparent(n2);
  19.     if (x1==x2)
  20.         return 0;
  21.     par[x2]=x1;
  22.     return 1;
  23. }
  24. int main()
  25. {
  26.     cin >>n;
  27.     for (int i=0;i<n;i++)
  28.     {
  29.         cin >>x[i].F>>y[i].F>>z[i].F;
  30.         x[i].S=y[i].S=z[i].S=i;
  31.     }
  32.     sort(x,x+n);
  33.     sort(y,y+n);
  34.     sort(z,z+n);
  35.     for (int i=1;i<n;i++)
  36.     {
  37.         pair <long long,pair<int,int> >p;
  38.         p.F=x[i].F-x[i-1].F;
  39.         p.S.F=x[i].S;
  40.         p.S.S=x[i-1].S;
  41.         v.push_back(p);
  42.         p.F=y[i].F-y[i-1].F;
  43.         p.S.F=y[i].S;
  44.         p.S.S=y[i-1].S;
  45.         v.push_back(p);
  46.         p.F=z[i].F-z[i-1].F;
  47.         p.S.F=z[i].S;
  48.         p.S.S=z[i-1].S;
  49.         v.push_back(p);
  50.     }
  51.     for (int i=0;i<n;i++)
  52.         par[i]=i;
  53.     sort(v.begin(),v.end());
  54.     for (int i=0;i<v.size();i++)
  55.     {
  56.         if (unun(v[i].S.F,v[i].S.S))
  57.             ans+=v[i].F;
  58.     }
  59.     cout <<ans;
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement