P1875 佳佳的魔法藥水

2022-06-02 04:24:09 字數 1233 閱讀 9694

題意:給出0~n-1號藥水的價錢 我們要用最少的錢買0號藥水;

題目中會給出某兩種藥水的融合品

讓我們找出最少花的錢和方案數

思路:一開始做這道題的時候,想到的肯定就是最短路了,於是我朝著spfa方面想

可是,我在建圖方面並不知道怎麼建。。。。想了大概乙個小時也不知道如何建圖

然後看了別人的題解,發現很多人都是用dij演算法來做這道題

用這個演算法來做這道題,倒是不用考慮建圖方面的內容,可以直接算;

那麼,到底怎麼做呢?

題目中讓我們求最短路徑和方案數,我們分別用tmp1,tmp2這兩個陣列來表示

然後再用乙個g【】【】來記錄哪兩種藥水的融合品

然後就開始跑dij演算法,跑鬆弛點的時候,跟模板是一樣的

然後在鬆弛的時候,與模板略有不同

在模板中,是跑那些還沒遍歷的點,根據題目中給出的路徑來鬆弛

而在本題中呢,是通過列舉已經鬆弛過的點,來鬆弛其他位置  (兩者其實也差不多,hhhh)

1 #include2

using

namespace

std;

3const

int maxn=1e3+10;4

const

int inf=0x3f3f3f3f;5

inttmp1[maxn];

6int

tmp2[maxn];

7int

g[maxn][maxn];

8int

vis[maxn];

9int

main()

1017 memset(g,-1,sizeof

(g));

18int

u,v,w;

19while(scanf("

%d%d%d

",&u,&v,&w)!=eof)

24for(int k=1;k)32}

33if(tmp==inf) break

;34 vis[base]=1;35

for(int j=0;j)

41else

if(tmp1[g[j][base]]==tmp1[j]+tmp1[base

])44}45

}46}47 printf("

%d %d\n

",tmp1[0],tmp2[0

]);48

return0;

49 }

view code

洛谷 P1875 佳佳的魔法藥水

p1875 佳佳的魔法藥水 題目描述 發完了 k 張 佳佳卻得到了乙個壞訊息 他的 mm 得病了!佳佳和大家一樣焦急 萬分!治好 mm 的病只有一種辦法,那就是傳說中的 0 號藥水 怎麼樣才能得到 0 號藥 水呢?你要知道佳佳的家境也不是很好,成本得足夠低才行 題目描述 得到一種藥水有兩種方法 可以...

洛谷 P1875 佳佳的魔法藥水

題目描述 發完了 k 張 佳佳卻得到了乙個壞訊息 他的 mm 得病了!佳佳和大家一樣焦急 萬分!治好 mm 的病只有一種辦法,那就是傳說中的 0 號藥水 怎麼樣才能得到 0 號藥 水呢?你要知道佳佳的家境也不是很好,成本得足夠低才行 題目描述 得到一種藥水有兩種方法 可以按照魔法書上的指導自己配置,...

洛谷P1875 佳佳的魔法藥水

發完了 k 張 佳佳卻得到了乙個壞訊息 他的 mm 得病了!佳佳和大家一樣焦急 萬分!治好 mm 的病只有一種辦法,那就是傳說中的 0 號藥水 怎麼樣才能得到 0 號藥 水呢?你要知道佳佳的家境也不是很好,成本得足夠低才行 得到一種藥水有兩種方法 可以按照魔法書上的指導自己配置,也可以到魔法商店裡去...