51nod1213 二維曼哈頓距離最小生成樹

2022-03-30 12:42:33 字數 1574 閱讀 7197

二維平面上有n個座標為整數的點,點x1 y1同點x2 y2之間的距離為:橫縱座標的差的絕對值之和,即:abs(x1 - x2) + abs(y1 - y2)(也稱曼哈頓距離)。求這n個點所組成的完全圖的最小生成樹的邊權之和。

input

第1行:1個數n,表示點的數量。(2 <= n <= 50000)

第2 - n + 1行:每行2個數,表示點的座標(0 <= x, y <= 1000000)

output

輸出n個點所組成的完全圖的最小生成樹的邊權之和。

就當是攢新板子了。。

題解:

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

#define ll long long

9#define ull unsigned long long

10#define ui unsigned int

11//

#define d double

12#define ld long double

13const

int maxn=50023,inf=1002333333;14

struct zsa[maxn],aa[maxn],e[maxn<<2];int

ne;15

struct zs1t[maxn],b[maxn];

16int

fa[maxn];

17int

i,j,k,n,m;

18ll ans;

1920

int ra,fh;char

rx;21 inline int

read()

2728 inline int abs(int x)

29 inline int getdis(int a,int

b)32 inline void insert(int a,int

b);37}38

39bool

operator

40bool

operator

41bool cmpe(zs a,zs b)

4243 inline void mins(zs1 &a,zs1 b)

44 inline void add(int x,zs1 mn)

45 inline int query(int x);while(x)mins(mn,t[x]),x-=x&-x;return

mn.id;}

46 inline void

run();

49for(i=1;i<=n;i++)b[i]=(zs1);

50 std::sort(b+1,b+1+n);

51for(i=1;i<=n;a[b[i].id].v=n-cnt+1,i++)cnt+=b[i].v!=b[i-1].v||i==1

;52 std::sort(a+1,a+1+n);

53for(i=n;i;i--));57}

58}5960 inline int getfa(int x)

61int

main()

view code

51nod 1213 二維曼哈頓距離最小生成樹

1213 二維曼哈頓距離最小生成樹 基準時間限制 4 秒 空間限制 131072 kb 分值 160 難度 6級演算法題 收藏關注二維平面上有n個座標為整數的點,點x1 y1同點x2 y2之間的距離為 橫縱座標的差的絕對值之和,即 abs x1 x2 abs y1 y2 也稱曼哈頓距離 求這n個點所...

二維曼哈頓最小生成樹

所以我們只要求乙個點在其45 角的區域內離他最近的點就行了,而這可以用線段樹或樹狀陣列解決 我們以y軸正半軸往右偏45 角的區域為例 點j在點i的這個區域要滿足的條件是 yj xj yi xi 且xj xi 那麼我們將點以x為第一關鍵字,y為第二關鍵字,排序後倒序插入線段樹 線段樹的線段這一維是離散...

51nod 1183 編輯距離(二維dp)

1183 編輯距離 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 編輯距離,又稱levenshtein距離 也叫做edit distance 是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字...