時間限制:
1000
ms | 記憶體限制:
65535
kb難度:
4描述
南陽理工學院要進行用電線路改造,現在校長要求設計師設計出一種佈線方式,該佈線方式需要滿足以下條件:
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
(樓的編號從1開始),由於安全問題,只能選擇乙個樓連線到外界供電裝置。
資料保證至少存在一種方案滿足要求。
輸出
每組測試資料輸出乙個正整數,表示鋪設滿足校長要求的線路的最小花費。
樣例輸入
14 6
1 2 10
2 3 10
3 1 10
1 4 1
2 4 1
3 4 1
1 3 5 6
樣例輸出
4
prim演算法:
#include#include#include#define inf 0x3f3f3f
#define max 500+10
using namespace std;
bool cmp(int x,int y) //利用sort函式來將城市需要外接電路花費排序
} mincost+=min;
visit[next]=1;
for(j=1;j<=school;j++)
} }
return mincost;
}
int main()
for(i=0;ikruskal演算法:
#include#include#define max 200000+10
using namespace std;
int set[550],contact[550]; //set : 記錄每個點的根結點
struct line
num[max];
bool cmp(line a,line b) //以花費大小從小到大將每一組聯絡排列
visit[1]=1; //設定1為起點
for (i=2;i<=num;i++)
}mincost+=min; //最小權值累加
visit[next]=1; //將訪問過的點標記
for(j=1;j<=num;j++) //更新lowcost陣列
} } return mincost;
}
//kruskal 演算法核心**
#include#define maxx x //x為 範圍
int set[maxx]; //set為 頭結點陣列
struct line //設定結構體
num[maxx];
bool cmp(line a,line b) //設定比較函式
int find(int p) //並查集
return p;
}void merge(int x,int y)
int main() //主函式
sort(num,num+road,cmp); //排序
for(i=1;i<=school;i++) //初始化頭結點陣列
int need=0;
for(i=0;iprintf("%d\n",need);
}
nyoj 38 佈線問題
nyoj 38 佈線問題 時間限制 1000 ms 記憶體限制 65535 kb難度 4 描述 南陽理工學院要進行用電線路改造,現在校長要求設計師設計出一種佈線方式,該佈線方式需要滿足以下條件 1 把所有的樓都供上電。2 所用電線花費最少 輸入第一行是乙個整數n表示有n組測試資料。n 5 每組測試資...
佈線問題 nyoj38
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 南陽理工學院要進行用電線路改造,現在校長要求設計師設計出一種佈線方式,該佈線方式需要滿足以下條件 1 把所有的樓都供上電。2 所用電線花費最少 輸入第一行是乙個整數n表示有n組測試資料。n 5 每組測試資料的第一行是兩個整數v,...
NYOJ 38 佈線問題
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 南陽理工學院要進行用電線路改造,現在校長要求設計師設計出一種佈線方式,該佈線方式需要滿足以下條件 1 把所有的樓都供上電。2 所用電線花費最少 輸入第一行是乙個整數n表示有n組測試資料。n 5 每組測試資料的第一行是兩個整數v,...