uva1494 最小生成樹 例題

2022-05-15 04:29:47 字數 1537 閱讀 1199

這題說的是n個城市 建路 使他們聯通然後 , 可以使用一條超級的路這條路不計入總長,此時路長度為b, 這條路鏈結的兩個城市人口與和為a+b, 然後計算出最大的a/b

解題先生成一顆最小生成樹,然後 計算出這顆樹上每兩個節點之間要經過的最長的那條路,然後列舉每兩個節點u 個v 求出答案

1 #include 2 #include 3 #include 4 #include 5 #include 

6 #include 7

using

namespace

std;

8const

int maxn =1000+5;9

struct

edge

15};

16 vectore;

17struct

pointloc[maxn];

20int

p[maxn],fa[maxn];

21double

maxcost[maxn][maxn];

22struct

ed;25 vectorg[ maxn ];

26int fid(int

u)29 vectoruse;

30void dfs(int u, int per,double

cost)

35use.push_back(u);

36for(int i =0; i < (int)g[u].size() ; i++)40}

41double distends(double x1, double y1, double x2, double

y2)44

intmain()

4555

e.clear();

56for(int i=0; i < n; i++)

57for(int j = i+1; j < n; j++) );60}

61sort(e.begin() , e.end());

62double sum_dist=0;63

int ge=n;

64for(int i =0; i<(int)e.size(); i++) ); g[v].push_back( (ed) );

70 fa[ fu ] =fv;

71 sum_dist+=dist;

72 ge--; if(ge==1) break;73

}74}75 memset(maxcost,0,sizeof

(maxcost));

76use.clear();

77 dfs(0,-1,0.0

);78

double ans =0;79

for(int i =0; i)

80for(int j =i+1 ; j)85}

86 printf("

%.2f\n

",ans);87}

88return0;

89 }

最小生成樹演算法及例題

什麼是生成樹?對連通圖進行遍歷,過程中經過的點和邊的組合可看成一棵樹,也叫生成樹 kruskal演算法 世界上有著許許多多的鐵路線 公路線,想要從乙個城市到另乙個城市修一條線路需要許多資金,當然,修路的方式有多種多樣,現在我們想知道如何修路能使得這些城市之間形成乙個通訊網,並且使得總耗費最少呢?如何...

uva 10397 最小生成樹

這道題是最小生成樹樹的變形。題目告訴你在其中已經新增過了一些邊,在剩下的邊中選取若干條使其成為乙個最小生成樹。我記得上一次做真題是遇到類似的問題。我用了prime演算法求解。現在就換用了kruskal演算法。根據查詢選把相應邊合併,這些邊不算入雖小生成樹的權值即可,接下來的就和kruskal演算法一...

Kruskal最小生成樹 演算法模板 例題

已知連通圖g 圖上有n個頂點。生成樹是指圖g的乙個極小 邊最少 連通子圖,生成樹上有n個頂點 n 1條邊,且任意兩點之間都是連通的。最小生成樹 已知帶權連通圖g,圖中有n個頂點,每條邊都有權值。我們要從圖中抽出一棵生成樹,使得樹上所有邊權之和最小,這棵生成樹就叫做 最小生成樹。常見變形應用 1.要求...