灌溉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...