uva 10397 最小生成樹

2022-09-16 15:00:12 字數 1116 閱讀 6071

這道題是最小生成樹樹的變形。題目告訴你在其中已經新增過了一些邊,在剩下的邊中選取若干條使其成為乙個最小生成樹。

我記得上一次做真題是遇到類似的問題。我用了prime演算法求解。現在就換用了kruskal演算法。

根據查詢選把相應邊合併,這些邊不算入雖小生成樹的權值即可,接下來的就和kruskal演算法一致。

**如下:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

#define inf 0x7fffffff

8#define len 1010

9using

namespace

std;

1011 typedef struct

point;

1415 typedef struct

arc;

1920

intn, m, top, parent[len];

21point p[len];

22 arc arc[len*len];

23double

map[len][len];

2425 inline double dis(point a, point b)

26bool cmp(arc a, arc b)

27//

ufset

28void init()

29int find(int x)

30void union(int a, int b)

3132

double

solve()

3346}47

for(int i=0; i)54}

55return

ans;56}

5758

intmain()

5967 top = 0;68

for(int i=1; i<=n ;i++)76}

77double ans =solve();

78 printf("

%.2lf\n

", ans);79}

80return0;

81 }

view code

UVA 11228 (Kruskal 最小生成樹)

題目大意 有一系列的點,這些點中假如歐氏距離小於r就認為是同一類,注意a和b同一類,b和c同一類,那麼a和c就是同一類。現在要在點集中鋪路,在一類中我們需要鋪路使得類中的點都連通,在不同類也需要通過路來把它們全部連起來,使得類和類之間能夠互相連線。約束 注意我們總的鋪路的距離要盡可能小。最後輸出鋪路...

UVA 11354 LCA 最小生成樹

點選開啟鏈結 題意 給乙個無向圖,然後有q次詢問u v,問的是u到v的所有路徑中的最小值最大 思路 u到v的路徑最小值最大,則這條邊肯定是最小生成樹上的邊,那麼我們可以先將所有的最小生成樹上的邊全都找出來,然後現在是乙個樹,然後跑一邊lca,對於現在詢問的u到v,只要找到它們的最近公共祖先,然後兩個...

uva1494 最小生成樹 例題

這題說的是n個城市 建路 使他們聯通然後 可以使用一條超級的路這條路不計入總長,此時路長度為b,這條路鏈結的兩個城市人口與和為a b,然後計算出最大的a b 解題先生成一顆最小生成樹,然後 計算出這顆樹上每兩個節點之間要經過的最長的那條路,然後列舉每兩個節點u 個v 求出答案 1 include 2...