Kruscal 城市建設

2021-06-28 18:29:55 字數 2131 閱讀 9300

問題描述

棟棟居住在乙個繁華的c市中,然而,這個城市的道路大都年久失修。市長準備重新修一些路以方便市民,於是找到了棟棟,希望棟棟能幫助他。

c市中有n個比較重要的地點,市長希望這些地點重點被考慮。現在可以修一些道路來連線其中的一些地點,每條道路可以連線其中的兩個地點。另外由於c市有一條河從中穿過,也可以在其中的一些地點建設碼頭,所有建了碼頭的地點可以通過河道連線。

棟棟拿到了允許建設的道路的資訊,包括每條可以建設的道路的花費,以及哪些地點可以建設碼頭和建設碼頭的花費。

市長希望棟棟給出乙個方案,使得任意兩個地點能只通過新修的路或者河道互達,同時花費盡量小。

輸入格式

輸入的第一行包含兩個整數n, m,分別表示c市中重要地點的個數和可以建設的道路條數。所有地點從1到n依次編號。

接下來m行,每行三個整數a, b, c,表示可以建設一條從地點a到地點b的道路,花費為c。若c為正,表示建設是花錢的,如果c為負,則表示建設了道路後還可以賺錢(比如建設收費道路)。

接下來一行,包含n個整數w_1, w_2, …, w_n。如果w_i為正數,則表示在地點i建設碼頭的花費,如果w_i為-1,則表示地點i無法建設碼頭。

輸入保證至少存在乙個方法使得任意兩個地點能只通過新修的路或者河道互達。

輸出格式

輸出一行,包含乙個整數,表示使得所有地點通過新修道路或者碼頭連線的最小花費。如果滿足條件的情況下還能賺錢,那麼你應該輸出乙個負數。

樣例輸入

5 51 2 4

1 3 -1

2 3 3

2 4 5

4 5 10

-1 10 10 1 1

樣例輸出 9

樣例說明

建設第2、3、4條道路,在地點4、5建設碼頭,總的花費為9。

資料規模和約定

對於20%的資料,1<=n<=10,1<=m<=20,0<=c<=20,w_i<=20;

對於50%的資料,1<=n<=100,1<=m<=1000,-50<=c<=50,w_i<=50;

對於70%的資料,1<=n<=1000;

對於100%的資料,1 <= n <= 10000,1 <= m <= 100000,-1000<=c<=1000,-1<=w_i<=1000,w_i≠0。

題解:一開始想把兩個點建碼頭的費用當成連邊的邊權,結果錯的一塌糊塗。

最後發現這樣建圖以後用貪心思想是錯誤的。

正確做法是新增乙個源點0,向可以建碼頭的點連邊,邊權為建碼頭的費用。

在只建道路所有點就能互達的情況下:

為了使0點聯通可能會使費用增加,所以要在建碼頭與不建碼頭兩種情況中取較小值。

在只建道路所有點不能互達的情況下:

答案就為建碼頭的最小費用

**:

#include#include#includeusing namespace std;

const int maxn = 10000 + 10;

const int maxm = 100000 + 10;

struct edge

edge[maxm << 1];

int we[maxn], f[maxn];

int n,m;

int tmp = 0;

void init()

int cmp(const edge &a,const edge &b)

int max(int a,int b)

void readdata()

for(int i = 1;i <= n;i++)scanf("%d", &we[i]);

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

int find(int x)

void merge(int x, int y)

void predo()

bool test()

bool ret = true;

for(int i = 2;i <= n;i++) }

return ret;

}int kruscal(bool flag)

} return ret;

}void solve()

else ans = kruscal(true);

printf("%d\n", ans); }

int main()

城市建設 藍橋杯

問題描述 棟棟居住在乙個繁華的c市中,然而,這個城市的道路大都年久失修。市長準備重新修一些路以方便市民,於是找到了棟棟,希望棟棟能幫助他。c市中有n個比較重要的地點,市長希望這些地點重點被考慮。現在可以修一些道路來連線其中的一些地點,每條道路可以連線其中的兩個地點。另外由於c市有一條河從中穿過,也可...

藍橋杯 城市建設

問題描述 棟棟居住在乙個繁華的c市中,然而,這個城市的道路大都年久失修。市長準備重新修一些路以方便市民,於是找到了棟棟,希望棟棟能幫助他。c市中有n個比較重要的地點,市長希望這些地點重點被考慮。現在可以修一些道路來連線其中的一些地點,每條道路可以連線其中的兩個地點。另外由於c市有一條河從中穿過,也可...

縣級智慧型城市建設方案 智慧型城市建設專案實施方案

智慧型城市建立實施方案 一 工作目標 資訊化與城市化深入融合並成為引領創新發展的重要驅動力,資訊 基礎設施達到一流水平,資訊資源普遍共享,公共服務更加高效,城市 建設 管理 執行更加精準,公眾生活更便捷,智慧型城市 框架初步形 成 保持城市資訊化綜合水平領先地位,構築智慧型 生態 宜居 可持 續發展...