POJ1062昂貴的聘禮

2021-10-02 23:06:16 字數 1675 閱讀 9782

思路:這是一道單源最短路徑的題,用djs(對不起我不會拼)可以做.但問題在怎麼控制地位相差懸殊的人不能交易!

解決的方式是列舉區間

for

(int i =

1;i <= m;i++

)//從比地位最低的人比酋長小m開始列舉.直到地位最低的人地位和酋長相同

ans =

djs();

//求最短路

sum =

min(sum,ans)

;//取最小值

}

在全域性一直出現了乙個問題.

我給map陣列的初始值是這樣的(下面是錯誤**)

for

(int i =

1; i <= n;i++

)for

(int j =

1;j <= n;j ++

)

我的最短路是這樣的(這個是正確的)

*

*int

djs(

) vis[x]=1

;for

(int j =

1;j <= n;j++)}

int mm =

9999999

;for

(int i =

1;i <= n;i++

)return mm;}*

*

因為我的map陣列沒有給[0]和[0]賦初值,導致在正常的情況下,如果鬆弛到最後沒有點可以取了應該不進行操作.但是在我的**中因為map[0]]沒有賦初值,他們一直是0,所以還會以x=0鬆弛,就會使**錯誤.這點要謹記,也說明了對dj理解還是不夠到位!

下面附上正確的所有**!

#include

#include

#include

#include

using

namespace std;

int vis[

110]

,level[

110]

,w[110

],kh[

110]

;int map[

110]

[110

],dis[

110]

;int price[

110]

;int n,m;

intdjs()

vis[x]=1

;for

(int j =

1;j <= n;j++)}

int mm =

9999999

;for

(int i =

1;i <= n;i++

)return mm;

}int

main()

for(

int i =

1;i <= n;i++)}

int sum=

99999999

,ans;

for(

int i =

1;i <= m;i++

) ans =

djs();

sum =

min(sum,ans);}

cout

}

poj 1062 昂貴的聘禮

這個題是乙個簡單的樹形dp,只是有乙個地位差限制,可以列舉可行區間,在可行區間裡進行dp.include include include include include include include include include include includeusing namespace st...

poj1062 昂貴的聘禮

做這題代價確實很昂貴,從昨天晚上一直到今天上午都在debug,今天上午提交還出現各種wa。比較明顯的最短路,有幾個地方要注意一下,首先建圖有個地方要注意以下,這題是用臨界矩陣儲存的有向圖,而且是由交換品指向購買品,然後將虛節點設為購買品的價值,最後列舉每乙個可能地位區間di求最短路,因為對於區間 c...

昂貴的聘禮(POJ1062)

這個玩了好久啊,是我第一次寫出這樣的最短路徑。還是參考了其它人的才出來,注意的有 1 是單向圖,2 把不滿足權值的提前全初始化。其實不用topo排序也可的。關鍵 void dfs int k include include include include include include includ...