POJ 1062 有限制的最短路

2021-10-01 14:19:06 字數 1336 閱讀 2407

題目鏈結

題意

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金...