week6 灌溉 資料中心

2021-10-04 17:31:28 字數 2337 閱讀 9934

灌溉title

input

第1行:乙個數n

第2行到第n+1行:數wi

第n+2行到第2n+1行:矩陣即pij矩陣

output

東東最小消耗的mp值

樣例

input:45

4430 2 2 2

2 0 3 3

2 3 0 4

2 3 4 0

output:

9資料中心title

分析(灌溉)

分析(資料中心)

在總體消耗最小的情況下,最大消耗最小。基本思想與上題一致,只需要記錄所新增的邊的最大權值即可。

總結

假設有n塊農田,即n+1個點(加上超級源點),超級源點到各點一共有n條邊,再加上最多n各點之間的邊n(n-1),邊數最多可達到n*n條,注意定義的陣列大小。

#include

#include

using

namespace std;

#define range 310

struct edge

edge()

};bool

com(

const edge& a,

const edge& b)

int p[

(int

)range]

,num[

(int

)range]

;void

init

(int n)

intfind

(int x)

bool

unite

(int x,

int y)

edge edge[range*range]

;int n=

0,edgenum=

0,i,j,weight=0;

void

kruskal()

}}intmain()

int temp=0;

for(i=

1;i<=n;i++)}

// for(i=0;i// printf("bianhao %d u %d v %d w %d\n",i,edge[i].u,edge[i].v,edge[i].w);

kruskal()

;printf

("%d"

,weight)

;return0;

}

#include

#include

using

namespace std;

#define range 1e5+100

struct edge

edge()

};bool

com(

const edge& a,

const edge& b)

int p[

(int

)range]

,num[

(int

)range]

;void

init

(int n)

intfind

(int x)

bool

unite

(int x,

int y)

edge edge[

(int

)range]

;int n=

0,m=

0,edgenum=

0,i=

0,root=

0,tmax=0;

void

kruskal()

}}intmain()

// for(i=0;i//printf("bianhao %d u %d v %d w %d\n",i,edge[i].u,edge[i].v,edge[i].w);

kruskal()

;printf

("%d"

,tmax)

;return0;

}

D 資料中心(Week6

樣例輸入 1 2 3 1 3 4 1 4 5 2 3 8 3 4 2 樣例輸出 樣例說明 題目簡化 給定乙個無向圖中的邊,求解最小生成樹 題目思想 kruskal 儲存方式 自定義結構體,其中過載了運算子 實現 將圖中所有的邊根據權重排序,從小到大依次遍歷每一條邊 判斷該邊加入後是否成環,如果成環返...

WEEK6作業 D 資料中心

題目 思路乍看這道題有點難懂,但是看了資料才明白要求的是生成樹中的最大邊中的最小邊,也就是求最小生成樹的問題跟上一道題一樣,不過注意的是要寫路徑壓縮後的 否則會超時。當然最大中取最小也可以用二分的方法,在這裡就不用了。include include using namespace std int p...

Week6 資料中心 並查集

輸入案例 451 1 2 3 1 3 4 1 4 5 2 3 8 3 4 2 輸出格式 思路分析其實這道題要求的答案,就是對給出的圖,求出其所有可能的生成樹里,最大的邊權最小的那棵生成樹,然後輸出它的那個最大的邊權。我們知道,最小生成樹一定是瓶頸生成樹,那麼直接求最小生成樹即可 並查集。題目給出的r...