傳送門
一共有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個比較重要的地點,市長希望這些地點重點被考慮。現在可以修一些道路來連線其中的一些地點...