題目鏈結
題意
n個人每人有乙個物品,每個物品可以直接買,也可以通過其他物品抵押加上少量的錢買,每個人有乙個等級,經過若干次交換購買的人中的最大等級差不能超過m。求要得到第一件物品的最少花費是多少?
思路
如果沒有等級約束就是乙個最短路的模板題,根據a物品加w個金幣換到b物品,可以建立一條有向邊a->b,cost w。然後直接用最短路即可,但是因為有了約束,不能直接呼叫。考慮題目的要求是要換到編號為1的物品,所以能交換到1的人群中,等級差異不能超過m,並且這個等級範圍要包括1的等級,因題目範圍較小,直接列舉區間,多次呼叫dijkstra取最小值。
還有乙個小技巧,題中沒有規定起點,我們可以假設0為起點,從0到每個頂點建立一條邊,邊的權值就是直接購買該物品的**。
#include
#include
#include
#include
#include
using
namespace std;
#define inf 0x3f3f3f3f
#define pr pair
const
int maxn =
1e5+7;
typedef
long
long ll;
int head[maxn]
, to[maxn<<1]
, nex[maxn<<1]
, edge[maxn<<1]
, cnt;
int n, m;
void
init()
void
add(
int x,
int y,
int z)
int d[maxn]
, p[maxn]
;bool final[maxn]
;void
dijkstra
(int l,
int r)}}
}int
main()
}for
(int i =
1; i <= n; i++
)add(0
, i, d[i]);
p[0]
= p[1]
;int ans = inf;
for(
int i =
max(
0, p[1]
- m)
; i - p[1]
<= m; i++
)printf
("%d\n"
, ans)
;}
poj 1062 有限制的最短路
思路 要求對於最短路上的點,不能出現等級之差大於m,於是我們可以列舉,假設酋長的等級為level,於是這個區間範圍 level m,level level m i,level i level,level m 都是可行的,對於列舉的每個區間範圍,做一次spfa即可,最終結果取最小值即可。1 inclu...
poj 1062 昂貴的聘禮 有限制的最短路
題意 探險家想娶酋長的女兒,需要昂貴的聘禮,但可以用其他物品加 替代,其他物品也可用另外的物品和 替代,求探險家最少需多少金幣可以娶到酋長的女兒?注意 等級限制 如果兩人地位等級差距超過了m,就不能 間接交易 但酋長的等級不一定最高 分析 求有等級限制的最短路,可以將每個物品 包括酋長允諾 看成乙個...
Poj1062 昂貴的聘禮 最短路加限制
題意 年輕的探險家來到了乙個印第安部落裡。在那裡他和酋長的女兒相愛了,於是便向酋長去求親。酋長要他用10000個金幣作為聘禮才答應把女兒嫁給他。探險家拿不出這麼多金幣,便請求酋長降低要求。酋長說 嗯,如果你能夠替我弄到大祭司的皮襖,我可以只要8000金幣。如果你能夠弄來他的水晶球,那麼只要5000金...