洛谷P1194 買禮物(Prim)

2022-05-27 01:45:13 字數 1160 閱讀 2485

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

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

如果你買了第iii樣東西,再買第jjj樣,那麼就可以只花ki,jk_ki,j​元,更巧的是,ki,jk_ki,j​竟然等於kj,ik_kj,i​。

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

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

接下來bbb行,每行bbb個數,第iii行第jjj個為ki,jk_ki,j​。

我們保證ki,j=kj,ik_=k_ki,j​=kj,i​並且ki,i=0k_=0ki,i​=0。

特別的,如果ki,j=0k_=0ki,j​=0,那麼表示這兩樣東西之間不會導致優惠。

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

輸入 #1複製

1 1

0

輸出 #1複製

1

輸入 #2複製

3 3

0 2 4

2 0 2

4 2 0

輸出 #2複製

7

只要想得到的話其實很簡單。有優惠關係的兩個點建邊,求最小生成樹後再加上乙個a即可,看到資料範圍跑prim就行。

有幾個重要的地方:

1.kij可能大於a,因此建邊要取min

2.要對prim的模板稍微修改一下,忽略掉kij=0的情況(沒有優惠/i=j),因為沒有優惠時kij=0而非inf,不太符合一般認知2333

#include using

namespace

std;

int a,b,mmap[1005][1005],d[1005],ans=0

;bool v[1005

];void

prim()

v[x]=1

;

inty;

for(y=1;y<=b;y++)

}}int

main()

}prim();

for(i=2;i<=b;i++)

cout

return0;

}

洛谷P1194 買禮物

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

洛谷 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...