東東在老家農村無聊,想種田。農田有 n 塊,編號從 1~n。種田要灌氵
眾所周知東東是乙個魔法師,他可以消耗一定的 mp 在一塊田上施展魔法,使得黃河之水天上來。他也可以消耗一定的 mp 在兩塊田的渠上建立傳送門,使得這塊田引用那塊有水的田的水。 (1<=n<=3e2)
黃河之水天上來的消耗是 wi,i 是農田編號 (1<=wi<=1e5)
建立傳送門的消耗是 pij,i、j 是農田編號 (1<= pij <=1e5, pij = pji, pii =0)
東東為所有的田灌氵的最小消耗
第1行:乙個數n
第2行到第n+1行:數wi
第n+2行到第2n+1行:矩陣即pij矩陣
東東最小消耗的mp值45
4430 2 2 2
2 0 3 3
2 3 0 4
2 3 4 0
考慮圖重構:加乙個超級源點0 號,並向n 個點連邊為wi,然後對這 n+1 個點跑最小生成樹即可
step0 建立edge結構體儲存邊的兩個頂點和權重,過載小於號為比較權重的大小
step1 將邊錄入到edges結構體陣列中,按照邊權重進行從小到大的排序,不斷取出權重最小的邊,用並查集判斷加入此邊之後是否會形成環,在不形成環時,加入該邊,當邊數為點數-1時停止取出邊。此時得到kruskal生成的最小生成樹的權重和,否則不能得到最小生成樹。
#include
#include
using
namespace std;
const
int maxn=
3e2+5;
//存圖
struct edge
}es[maxn*maxn]
;int tot=0;
int n;
//並查集
int par[maxn]
;void
init
(int n)
intfind
(int x)
bool
unite
(int x,
int y)
intkruskal()
return-1
;}intmain()
for(
int i=
1;i<=n;i++
)for
(int j=
1;j<=n;j++
)printf
("%d"
,kruskal()
);return0;
}
Week6 作業C 掌握魔法 東東 I
東東在老家農村無聊,想種田。農田有 n 塊,編號從 1 n。種田要灌水 眾所周知東東是乙個魔法師,他可以消耗一定的 mp 在一塊田上施展魔法,使得黃河之水天上來。他也可以消耗一定的 mp 在兩塊田的渠上建立傳送門,使得這塊田引用那塊有水的田的水。1 n 3e2 黃河之水天上來的消耗是 wi,i 是農...
Week 6 掌握魔法 東東 I
東東在老家農村無聊,想種田。農田有 n 塊,編號從 1 n。種田要灌氵 眾所周知東東是乙個魔法師,他可以消耗一定的 mp 在一塊田上施展魔法,使得黃河之水天上來。他也可以消耗一定的 mp 在兩塊田的渠上建立傳送門,使得這塊田引用那塊有水的田的水。1 n 3e2 黃河之水天上來的消耗是 wi,i 是農...
week6實驗A 掌握魔法 東東 II
題目 從瑞神家打牌回來後,東東痛定思痛,決定苦練牌技,終成賭神!東東有 a b 張撲克牌。每張撲克牌有乙個大小 整數,記為a,範圍區間是 0 到 a 1 和乙個花色 整數,記為b,範圍區間是 0 到 b 1 撲克牌是互異的,也就是獨一無二的,也就是說沒有兩張牌大小和花色都相同。一手牌 的意思是你手裡...