Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define F first
- #define S second
- vector<pair <long long,pair<int,int> > >v;
- pair <int,long long> x[300005],y[300005],z[300005];
- int n,m,par[300005];
- long long ans;
- int findparent (int x)
- {
- if (x==par[x])
- return x;
- return par[x]=findparent (par[x]);
- }
- bool unun(int n1,int n2)
- {
- int x1=findparent(n1);
- int x2=findparent(n2);
- if (x1==x2)
- return 0;
- par[x2]=x1;
- return 1;
- }
- int main()
- {
- cin >>n;
- for (int i=0;i<n;i++)
- {
- cin >>x[i].F>>y[i].F>>z[i].F;
- x[i].S=y[i].S=z[i].S=i;
- }
- sort(x,x+n);
- sort(y,y+n);
- sort(z,z+n);
- for (int i=1;i<n;i++)
- {
- pair <long long,pair<int,int> >p;
- p.F=x[i].F-x[i-1].F;
- p.S.F=x[i].S;
- p.S.S=x[i-1].S;
- v.push_back(p);
- p.F=y[i].F-y[i-1].F;
- p.S.F=y[i].S;
- p.S.S=y[i-1].S;
- v.push_back(p);
- p.F=z[i].F-z[i-1].F;
- p.S.F=z[i].S;
- p.S.S=z[i-1].S;
- v.push_back(p);
- }
- for (int i=0;i<n;i++)
- par[i]=i;
- sort(v.begin(),v.end());
- for (int i=0;i<v.size();i++)
- {
- if (unun(v[i].S.F,v[i].S.S))
- ans+=v[i].F;
- }
- cout <<ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement