其實這題是昨天做的,不過沒來的及寫blog,還有通過這題想通了一些問題,所以想專門的抽個時間好好寫寫,嗯,今後要好好寫blog,利用這段時間好好整理一下自己的思路,這樣也好。
這題的題意就不說了,漢語,沒有什麼理解上的問題,這題最大的障礙就是在怎樣處理等級問題上。開始的時候,我嘗試著用bellman_ford,在鬆弛的時候加上等級的處理,但是我理解錯了一句話,「地位差距超過一定限制的兩個人之間不會進行任何形式的直接接觸,包括交易。「這句話是說從源點開始擴充套件的所有點都必須在源點的等級限制範圍內。而bellman
_ford的鬆弛處理則並不能保證這一點。所以很不幸的wa了,然後看discuss裡的人用dijkstra做的,又想了一下,dijkstra是從源點一層一層向前擴充套件,正好符合這題的特點,想明白了怎麼做,但是對於**實現還是花了一點時間,這個需要鍛鍊。
**:view code
#include #include#include
#include
#include
#include
#include
#define n 104
#define inf 10000000
using
namespace
std ;
struct
node
p[n] ;
int map[n][n] , vist[n] , dis[n] , lev[n] ;//
vist[i]標記這個點是否遍歷過,dis[i]表示源點到
//點i的最短距離,lev[i]記錄點i的等級
intn , w , m ;
void
init()
intdijkstra()
//加上最後那個物品的價值,找出最小值
for ( j = 1 ; j <= n ; j++)
if ( dis[j] + p[j].cost
ans = dis[j] +p[j].cost ;
}return
ans ;
}int
main()
}printf (
"%d\n
", dijkstra());
}return0;
}
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...