RT,在51nod测得,但是感觉那边没啥人就来洛谷问了、
#include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <istream>
#include <string>
#include <queue>
#include <deque>
#include <random>
#include <stack>
#include <set>
#include <string.h>
#include <map>
#include <unordered_map>
#include <sstream>
#include <bitset>
#include <fstream>
#include <climits>
#include <time.h>
#include <cassert>
using namespace std;
#define int long long
#define double long double
#define endl "\n"
#define pii pair<int,int>
#define p1(x) ((x).first)
#define p2(x) ((x).second)
int n;
struct node{int x,y;}T[50300];
inline int MAN(node A,node B){
return abs(A.x-B.x)+abs(A.y-B.y);
}
inline bool cmpru(int x,int y){
node A=T[x],B=T[y];
return A.x==B.x?A.y>B.y:A.x>B.x;
}
inline bool cmprd(int x,int y){
node A=T[x],B=T[y];
return A.x==B.x?A.y<B.y:A.x>B.x;
}
inline bool cmplu(int x,int y){
node A=T[x],B=T[y];
return A.x==B.x?A.y>B.y:A.x<B.x;
}
inline bool cmpld(int x,int y){
node A=T[x],B=T[y];
return A.x==B.x?A.y<B.y:A.x<B.x;
}
int p[50030];
pii tl[1000300],tr[1000300];
inline int lb(int x){
return x&-x;
}
inline void modl(int x,pii k){
while(x<=1000001){
tl[x]=min(tl[x],k);
x+=lb(x);
}
}
inline void clrl(){
memset(tl,0x3f,sizeof(tl));
}
inline pii gl(int x){
pii res={1e9,0};
while(x){
res=min(res,tl[x]);
x-=lb(x);
}
return res;
}
inline void modr(int x,pii k){
while(x){
tr[x]=min(tr[x],k);
x-=lb(x);
}
}
inline void clrr(){
memset(tr,0x3f,sizeof(tr));
}
inline pii gr(int x){
pii res={1e9,0};
while(x<=1000001){
res=min(res,tr[x]);
x+=lb(x);
}
return res;
}
struct edge{int u,v,w;};
vector<edge>E;
int f[50030];
inline int ff(int x){
return f[x]==x?x:f[x]=ff(f[x]);
}
inline bool merge(int x,int y){
x=ff(x),y=ff(y);
if(x==y)return 0;
f[x]=y;
return 1;
}
inline bool cmp(edge A,edge B){
return A.w<B.w;
}
inline int KR(vector<edge> E){
int res=0;
sort(E.begin(),E.end(),cmp);
for(auto e:E)
if(merge(e.u,e.v))
res+=e.w;
return res;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
//freopen("/Users/noip2019/Downloads/51nod_1213_8_in.txt","r",stdin);
cin>>n;
for(int i=1;i<=n;i ++)
cin>>T[i].x>>T[i].y,p[i]=i,T[i].x++,T[i].y++,f[i]=i;
sort(p+1,p+n+1,cmpru);
clrr();
for(int i=1;i<=n;i++){
pii S=gr(T[p[i]].y);
if(p2(S))
E.push_back({p[i],p2(S),p1(S)-T[p[i]].x-T[p[i]].y});
modr(T[p[i]].y,{T[p[i]].x+T[p[i]].y,p[i]});
}
sort(p+1,p+n+1,cmplu);
clrr();
for(int i=1;i<=n;i++){
pii S=gr(T[p[i]].y);
if(p2(S))
E.push_back({p[i],p2(S),p1(S)+T[p[i]].x-T[p[i]].y});
modr(T[p[i]].y,{-T[p[i]].x+T[p[i]].y,p[i]});
}
sort(p+1,p+n+1,cmprd);
clrl();
for(int i=1;i<=n;i++){
pii S=gl(T[p[i]].y);
if(p2(S))
E.push_back({p[i],p2(S),p1(S)-T[p[i]].x+T[p[i]].y});
modl(T[p[i]].y,{T[p[i]].x-T[p[i]].y,p[i]});
}
sort(p+1,p+n+1,cmpld);
clrl();
for(int i=1;i<=n;i++){
pii S=gl(T[p[i]].y);
if(p2(S))
E.push_back({p[i],p2(S),p1(S)+T[p[i]].x+T[p[i]].y});
modl(T[p[i]].y,{-T[p[i]].x-T[p[i]].y,p[i]});
}
// for(edge e:E)
// cout<<e.u<<" "<<e.v<<" "<<e.w<<" "<<MAN(T[e.u],T[e.v])<<endl;
// for(int i=1;i<=n;i++)
// for(int j=i+1;j<=n;j++)
// E.push_back({i,j,MAN(T[i],T[j])});
//cout<<E.size()<<endl;
cout<<KR(E)<<endl;
cout.flush();
return 0;
}
/*
*/