洛谷P1194 買禮物

2021-08-09 13:45:10 字數 1147 閱讀 7374

又到了一年一度的明明生日了,明明想要買b樣東西,巧的是,這b樣東西**都是a元。

但是,商店老闆說最近有**活動,也就是:

如果你買了第i樣東西,再買第j樣,那麼就可以只花k[i,j]元,更巧的是,k[i,j]竟然等於k[j,i]。

現在明明想知道,他最少要花多少錢。

輸入格式:

第一行兩個整數,a,b。

接下來b行,每行b個數,第i行第j個為k[i,j]。

我們保證k[i,j]=k[j,i]並且k[i,i]=0。

特別的,如果k[i,j]=0,那麼表示這兩樣東西之間不會導致優惠。

輸出格式:

僅一行乙個整數,為最小要花的錢數。

輸入樣例#1:

【樣例輸入1】

1 10

【樣例輸入2】

3 30 2 4

2 0 2

4 2 0

輸出樣例#1:

【樣例輸出1】

1【樣例輸出2】

7

樣例解釋2

先買第2樣東西,花費3元,接下來因為優惠,買1,3樣都只要2元,共7元。

(同時滿足多個「優惠」的時候,聰明的明明當然不會選擇用4元買剩下那件,而選擇用2元。)

資料規模

對於30%的資料,1<=b<=10。

對於100%的資料,1<=b<=500,0<=a,k[i,j]<=1000。

最小生成樹,只是有些要注意的地方。。。

附**:

#include#include#include#define maxn 510

using namespace std;

int n,m,k=1,fa[maxn];

struct nodea[maxn*maxn];

inline int read()

while(c>='0'&&c<='9')

return date*w;

}bool cmp(const node &x,const node &y)

for(int i=1;i<=m;i++)

k--;

sort(a+1,a+k+1,cmp);

kruskal();

return 0;

}

洛谷 P1194 買禮物

又到了一年一度的明明生日了,明明想要買bb樣東西,巧的是,這bb樣東西 都是aa元。但是,商店老闆說最近有 活動,也就是 如果你買了第ii樣東西,再買第jj樣,那麼就可以只花k ki,j 元,更巧的是,k ki,j 竟然等於k kj,i 現在明明想知道,他最少要花多少錢。輸入格式 第一行兩個整數,a...

洛谷 P1194 買禮物

這道題其實就是轉化乙個模型就可以了。買了乙個另外乙個又優惠,其實就相當於在優惠的時候連一條邊,因為不可能多買,所以就是建一棵最小生成樹。最後因為肯定買了一件物品,要加上最初的單價。include using namespace std struct node node e 510000 int pr...

洛谷 P1194 買禮物

又到了一年一度的明明生日了,明明想要買b樣東西,巧的是,這b樣東西 都是a元。但是,商店老闆說最近有 活動,也就是 如果你買了第i樣東西,再買第j樣,那麼就可以只花 k 元,更巧的是,k 竟然等於 k 現在明明想知道,他最少要花多少錢。可以這樣想,購買這些東西會構成乙個樹狀關係,除了根之外其他點都按...