洛谷P1265 公路修建

2022-05-14 18:30:07 字數 1535 閱讀 2660

——————————

太長不看版:給你乙個數字n,接下來是n個點的x、y座標,求個最小生成樹

——————————

某國有n個城市,它們互相之間沒有公路相通,因此交通十分不便。為解決這一「行路難」的問題,**決定修建公路。修建公路的任務由各城市共同完成。

修建工程分若干輪完成。在每一輪中,每個城市選擇乙個與它最近的城市,申請修建通往該城市的公路。**負責審批這些申請以決定是否同意修建。

**審批的規則如下:

(1)如果兩個或以上城市申請修建同一條公路,則讓它們共同修建;

(2)如果三個或以上的城市申請修建的公路成環。如下圖,a申請修建公路ab,b申請修建公路bc,c申請修建公路ca。則**將否決其中最短的一條公路的修建申請;

(3)其他情況的申請一律同意。

一輪修建結束後,可能會有若干城市可以通過公路直接或間接相連。這些可以互相:連通的城市即組成「城市聯盟」。在下一輪修建中,每個「城市聯盟」將被看作乙個城市,發揮乙個城市的作用。

當所有城市被組合成乙個「城市聯盟」時,修建工程也就完成了。

你的任務是根據城市的分布和前面講到的規則,計算出將要修建的公路總長度。

輸入格式:

第一行乙個整數n,表示城市的數量。(n≤5000)

以下n行,每行兩個整數x和y,表示乙個城市的座標。(-1000000≤x,y≤1000000)

輸出格式:

乙個實數,四捨五入保留兩位小數,表示公路總長。(保證有惟一解)

輸入樣例#1:

4

0 01 2

-1 2

0 4

輸出樣例#1:

6.47
修建的公路如圖所示:

5000*5000,用鄰接矩陣存邊容易mle,鄰接表又好麻煩,所以乾脆不存邊,每次即時算距離。

跑一邊prim就行

1

/**/

2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8const

int mxn=6000;9

bool

vis[mxn];

10double

dis[mxn];

11double

ans;

12int

x[mxn],y[mxn];

13int

n;14

double dx(int a,int

b) 17

intmain()31}

32 ans+=mini;

33 vis[mark]=1;34

for(j=1;j<=n;j++)38}

39 printf("

%.2lf\n

",ans);

40return0;

41 }

洛谷 P1265 公路修建

本題的描述 城市聯盟,最短距離。使人想到了prim求mst,再一看資料範圍 完全圖!那麼一定得用prim,因為只有5000個點,所以不加優化的prim就能過。include include include include include include using namespace std con...

洛谷P1265 公路修建題解

某國有n個城市,它們互相之間沒有公路相通,因此交通十分不便。為解決這一 行路難 的問題,決定修建公路。修建公路的任務由各城市共同完成。修建工程分若干輪完成。在每一輪中,每個城市選擇乙個與它最近的城市,申請修建通往該城市的公路。負責審批這些申請以決定是否同意修建。審批的規則如下 1 如果兩個或以上城市...

洛谷P1265 公路修建(Prim)

to 洛谷.1265 公路修建 某國有n個城市,它們互相之間沒有公路相通,因此交通十分不便。為解決這一 行路難 的問題,決定修建公路。修建公路的任務由各城市共同完成。修建工程分若干輪完成。在每一輪中,每個城市選擇乙個與它最近的城市,申請修建通往該城市的公路。負責審批這些申請以決定是否同意修建。審批的...