題意:給出0~n-1號藥水的價錢 我們要用最少的錢買0號藥水;
題目中會給出某兩種藥水的融合品
讓我們找出最少花的錢和方案數
思路:一開始做這道題的時候,想到的肯定就是最短路了,於是我朝著spfa方面想
可是,我在建圖方面並不知道怎麼建。。。。想了大概乙個小時也不知道如何建圖
然後看了別人的題解,發現很多人都是用dij演算法來做這道題
用這個演算法來做這道題,倒是不用考慮建圖方面的內容,可以直接算;
那麼,到底怎麼做呢?
題目中讓我們求最短路徑和方案數,我們分別用tmp1,tmp2這兩個陣列來表示
然後再用乙個g【】【】來記錄哪兩種藥水的融合品
然後就開始跑dij演算法,跑鬆弛點的時候,跟模板是一樣的
然後在鬆弛的時候,與模板略有不同
在模板中,是跑那些還沒遍歷的點,根據題目中給出的路徑來鬆弛
而在本題中呢,是通過列舉已經鬆弛過的點,來鬆弛其他位置 (兩者其實也差不多,hhhh)
1 #include2view codeusing
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 }
洛谷 P1875 佳佳的魔法藥水
p1875 佳佳的魔法藥水 題目描述 發完了 k 張 佳佳卻得到了乙個壞訊息 他的 mm 得病了!佳佳和大家一樣焦急 萬分!治好 mm 的病只有一種辦法,那就是傳說中的 0 號藥水 怎麼樣才能得到 0 號藥 水呢?你要知道佳佳的家境也不是很好,成本得足夠低才行 題目描述 得到一種藥水有兩種方法 可以...
洛谷 P1875 佳佳的魔法藥水
題目描述 發完了 k 張 佳佳卻得到了乙個壞訊息 他的 mm 得病了!佳佳和大家一樣焦急 萬分!治好 mm 的病只有一種辦法,那就是傳說中的 0 號藥水 怎麼樣才能得到 0 號藥 水呢?你要知道佳佳的家境也不是很好,成本得足夠低才行 題目描述 得到一種藥水有兩種方法 可以按照魔法書上的指導自己配置,...
洛谷P1875 佳佳的魔法藥水
發完了 k 張 佳佳卻得到了乙個壞訊息 他的 mm 得病了!佳佳和大家一樣焦急 萬分!治好 mm 的病只有一種辦法,那就是傳說中的 0 號藥水 怎麼樣才能得到 0 號藥 水呢?你要知道佳佳的家境也不是很好,成本得足夠低才行 得到一種藥水有兩種方法 可以按照魔法書上的指導自己配置,也可以到魔法商店裡去...