CCF 最優灌溉

2021-08-07 05:33:09 字數 1583 閱讀 7219

問題描述

雷雷承包了很多片麥田,為了灌溉這些麥田,雷雷在第乙個麥田挖了一口很深的水井,所有的麥田都從這口井來引水灌溉。

為了灌溉,雷雷需要建立一些水渠,以連線水井和麥田,雷雷也可以利用部分麥田作為「中轉站」,利用水渠連線不同的麥田,這樣只要一片麥田能被灌溉,則與其連線的麥田也能被灌溉。

現在雷雷知道哪些麥田之間可以建設水渠和建設每個水渠所需要的費用(注意不是所有麥田之間都可以建立水渠)。請問灌溉所有麥田最少需要多少費用來修建水渠。

輸入格式

輸入的第一行包含兩個正整數n, m,分別表示麥田的片數和雷雷可以建立的水渠的數量。麥田使用1, 2, 3, ……依次標號。

接下來m行,每行包含三個整數ai, bi, ci,表示第ai片麥田與第bi片麥田之間可以建立一條水渠,所需要的費用為ci。

輸出格式

輸出一行,包含乙個整數,表示灌溉所有麥田所需要的最小費用。

樣例輸入

4 4

1 2 1

2 3 4

2 4 2

3 4 3

樣例輸出

6 樣例說明

建立以下三條水渠:麥田1與麥田2、麥田2與麥田4、麥田4與麥田3。

評測用例規模與約定

前20%的評測用例滿足:n≤5。

前40%的評測用例滿足:n≤20。

前60%的評測用例滿足:n≤100。

所有評測用例都滿足:1≤n≤1000,1≤m≤100,000,1≤ci≤10,000。

最小生成樹問題,kruskal和prime演算法都可。借用了使用vector的鏈結表,如果不這樣,而是將所有路徑最初都置為無窮大,在遍歷方面方便多了。

#include

#include

#include

#include

using

namespace

std;

#define nmax 10050

#define inf 0x3f3f3f3f

int mincost[nmax];

vector

int,int> > g[nmax];

bool visit[nmax];

int n,m,total;

// 更新以u為起點的路徑代價。

void update(int u)

}}void prime(int u)

}int main()

prime(1);

cout

0;}

#include

using

namespace

std;

#define inf 0x3f3f3f3f

int lowcost[1010];

int e[1010][1010];

bool vis[1010];

int n,m,sum;

void prime()

} int main()

prime();

printf("%d\n",sum);

}

CCF 最優灌溉

問題描述 試題編號 201412 4 試題名稱 最優灌溉 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 雷雷承包了很多片麥田,為了灌溉這些麥田,雷雷在第乙個麥田挖了一口很深的水井,所有的麥田都從這口井來引水灌溉。為了灌溉,雷雷需要建立一些水渠,以連線水井和麥田,雷雷也可以利用部...

ccf 最優灌溉

問題描述 雷雷承包了很多片麥田,為了灌溉這些麥田,雷雷在第乙個麥田挖了一口很深的水井,所有的麥田都從這口井來引水灌溉。為了灌溉,雷雷需要建立一些水渠,以連線水井和麥田,雷雷也可以利用部分麥田作為 中轉站 利用水渠連線不同的麥田,這樣只要一片麥田能被灌溉,則與其連線的麥田也能被灌溉。現在雷雷知道哪些麥...

CCF 201412 4 最優灌溉

問題描述 雷雷承包了很多片麥田,為了灌溉這些麥田,雷雷在第乙個麥田挖了一口很深的水井,所有的麥田都從這口井來引水灌溉。為了灌溉,雷雷需要建立一些水渠,以連線水井和麥田,雷雷也可以利用部分麥田作為 中轉站 利用水渠連線不同的麥田,這樣只要一片麥田能被灌溉,則與其連線的麥田也能被灌溉。現在雷雷知道哪些麥...