描述
南陽理工學院要進行用電線路改造,現在校長要求設計師設計出一種佈線方式,該佈線方式需要滿足以下條件:
1、把所有的樓都供上電。
2、所用電線花費最少
輸入
第一行是乙個整數n表示有n組測試資料。(n<5)
每組測試資料的第一行是兩個整數v,e.
v表示學校裡樓的總個數(v<=500)
隨後的e行裡,每行有三個整數a,b,c表示a與b之間如果建鋪設線路花費為c(c<=100)。(哪兩棟樓間如果沒有指明花費,則表示這兩棟樓直接連通需要費用太大或者不可能連通)
隨後的1行裡,有v個整數,其中第i個數表示從第i號樓接線到外界供電設施所需要的費用。( 0
輸出每組測試資料輸出乙個正整數,表示鋪設滿足校長要求的線路的最小花費。
樣例輸入
14 61 2 10
2 3 10
3 1 10
1 4 1
2 4 1
3 4 1
1 3 5 6
樣例輸出
4
思路:先將花費從小到大排序,然後判斷a、b兩號樓之間有沒有連通,如果沒有,則將他們歸到乙個集合中去,並加上花費
注:判斷
a、b兩號樓之間有沒有連通,不能只查f[a]==f[b];而要通過find函式的返回值,如果t1!=t2,則說明兩數不屬於乙個集合,此時應把花費加上
並查集模板
#include#include#include#include#include#include#includeusing namespace std;
int f[1005],sum=0;
struct node
s[150000];
int cmp(node a,node b)
{ return a.c
並查集問題
輸入 第一行 城鎮數目n,道路數目m 接下的每一行表示 某條道路連線的城鎮號 輸出 至少還需要建設的道路數目,才能將所有的城鎮連線起來 例子 輸入 3 31 2 1 22 1 輸出 1解釋 要使城鎮123連通,還需要修建23之間的連通路 即還需要修建一條路 cpp實現問題求解 include usi...
並查集 並查集
本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...
並查集相關問題
include 演算法題 1 已知有n個人構成的乙個集合,其中某些人與某些人直接是朋友關係。假定朋友關係具有傳遞性 朋友的朋友也是朋友 對稱性 相互是朋友 自反性 我是我自己的朋友 給定m組朋友關係,想要知道n個人中的任意兩個人是不是朋友關係。using namespace std typedef ...