思路:這是一道單源最短路徑的題,用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...