JZOJ 1405 電纜建設 最小生成樹

2021-09-29 12:30:06 字數 1250 閱讀 8409

傳送門

一共有n+m

n+mn+

m個點,我們需要在連線長度最小的情況下使得所有點相連通

最顯然的方式肯定跑最小生成樹

但這樣的時間複雜度肯定是承擔不起的,所以我們要想點方法使得演算法更加優秀

考慮n

nn個點中的乙個點與m

mm個點中所有點的連線,因為題目要求的是最小長度,所以只有與這個點高度最相近的m

mm個點中的兩個的連線才會可能是答案;對於橫座標相同的點,顯然只會和上下兩個點相連的連線是可能是答案

按照這個規則建邊就能得到4∗(

n+m)

4*(n+m)

4∗(n+m

)條邊,如此一來時間複雜度就變得很優秀

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using namespace std;

inline ll read()

while

(s>=

'0'&&s<=

'9')

return d*f;

}ll y1[

600005

],y2[

600005];

struct nodee[

2400005];

int cnt=0;

void

add(

int x,

int y,ll w)

;return;}

int f[

1200005];

bool cmp

(node a,node b)

ll find

(ll i)

intmain()

for(

int i=

1;i<=n+m;i++

) f[i]

=i;sort

(e+1

,e+1

+cnt,cmp)

;double ans=0;

for(

int i=

1,k=

0;i<=cnt&&k1;i++

)printf

("%.2lf"

,ans)

;return0;

}

jzoj1405 電纜建設

特殊的平面圖求mst。當然是要尋找性質。第一點,樹邊不可能相交。相交後,必然存在更優方案使得原生成樹成立。第二點,若存在圖2情況,則ac不可能是樹邊。證明如下 反證法,假設ac是樹邊。由鈍角三角形可得,ab ac,bc ac,由於ac是樹邊,所以不存在邊交叉與ac。1.若ab bc,因為ac是樹邊,...

JZOJ 最小生成樹 給水

由n塊草地組成了乙個花園 現在要你給這個花園裡的所有草地供水 你可以在第i ii塊草地挖井,費用為a i a i a i 也可以從其他草地連線水管過來 但前提是那個草地要有水,費用為f i j f i j f i j 現在要你求給所有草地供水 最少需要多少大洋 第一行,乙個n nn第2 22 n 1...

(最小生成樹 思維)城市建設

歷屆試題 城市建設 時間限制 1.0s 記憶體限制 256.0mb 問題描述 棟棟居住在乙個繁華的c市中,然而,這個城市的道路大都年久失修。市長準備重新修一些路以方便市民,於是找到了棟棟,希望棟棟能幫助他。c市中有n個比較重要的地點,市長希望這些地點重點被考慮。現在可以修一些道路來連線其中的一些地點...