小謝是一位剛剛搬到二維星球上居住的工程師,現在他要為該星球上的乙個村莊鋪設道路,規定該村莊有n
個地點( 編號從1
至n
)需要鋪設道路,只需要保證n
個地點中任意兩個地點都能連通( 即連通圖 ),但是由於身處二維星球,並且每個地點被抽象為乙個二維座標系上的點(a,b)
,並且對於任意兩個地點連通的代價不再與歐幾里得距離有關了。假設地點a(x,y)
, 地點b(p,q)
,現在規定為這兩個地點之間鋪設道路的代價為min(∣x−p∣,∣y−q∣)
,這對於初來乍到的小謝來說有點困難,現在他把地圖給了你,你能幫他規劃乙個最小代價的工程使得這n個地點的任意兩點都是連通的嗎?
第一行輸出乙個整數n,代表地點個數(2 <= n <= 100000)
接下來n行,每行兩個整數x,y。代表第i個村莊在二維座標系上的座標( x , y )。 (0 <= x , y <= 1000000)
輸出乙個整數,代表該工程的最小代價。
311
5623
4
第乙個地點和第三個地點鋪設道路,代價為 min(|
1-2|
,|1-
3|)=
1;第二個地點和第三個地點鋪設道路,代價為 min(|
2-5|
,|3-
6|)=
3;此時三個地點已構成任意兩點連通並且滿足最小代價;
總的最小代價為4。
題目要求將圖的頂點全部連通,並且花費最少代價,可以想到最小生成樹問題,先將頂點按x從大到小排序給圖插入邊,然後將頂點按y從大到小排序給圖插入邊,由此找出要求的最小生成樹一定在上面兩種方式插入的邊上建立,於是遍歷圖找出最小生成樹即可,注意這裡n <= 1e5,那麼用矩陣表示圖時間空間都會爆。
以下是**:
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn =
1e5+2;
int ans;
#pragma region 並查集
int set[maxn]
;int
findset
(int x)
bool
unionset
(int r1,
int r2)
#pragma endregion
#pragma region 鄰接表圖
typedef
struct enode
* edge;
struct adjvnode
;typedef
struct vnode adjvlist;
typedef
struct gnode
* graph;
void
insertedge
(edge e, graph g)
void
dispose
(graph g)
}delete g;
g =null;}
#pragma endregion
#pragma region 優先佇列
struct cmp };
priority_queue
, cmp> q;
#pragma endregion
struct node p[maxn]
;int
getvalue
(node a, node b)
bool
cmp1
(node a, node b)
bool
cmp2
(node a, node b)
void
mintree
(graph g)
}int
main()
graph g =
newgnode()
; g-
>nv = n;
edge e =
newenode()
;sort
(p, p + n, cmp1)
;for
(int i =
1; i < n; i++))
;}sort
(p, p + n, cmp2)
;for
(int i =
1; i < n; i++))
;}delete e;
mintree
(g);
dispose
(g);
cout << ans << endl;
system
("pause");
return0;
}
小謝第22問 for迴圈中的非同步事件
如果在for迴圈中寫乙個函式,然後等待for迴圈中的函式結束後再進行下一步函式請求,再js中,我們顯然要進行同步處理,可以用async await進行處理,如下方 場景 因為要for 迴圈後才執行this.gettable這個函式,因此用await將api函式變為同步,等待for迴圈執行結束後再執行...
PTA 任務排程的合理性 拓撲排序
題意 假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,...
E TT 的神秘任務3
tt 貓咖的生意越來越紅火,人越來越多,也越來越擁擠。為了解決這個問題,tt 決定擴大營業規模,但貓從 來呢?tt 第一時間想到了神秘人,想要再次通過完成任務的方式獲得貓咪。而這一次,神秘人決定加大難度。給定乙個環,a 1 a 2 a 3 a n 其中 a 1 的左邊是 a n 要求從環上找出一段長...