poj 1062 昂貴的聘禮 有限制的最短路

2021-06-28 11:24:40 字數 937 閱讀 6229

題意:探險家想娶酋長的女兒,需要昂貴的聘禮,

但可以用其他物品加***替代,其他物品也可用另外的物品和***替代,

求探險家最少需多少金幣可以娶到酋長的女兒?

注意:等級限制:如果兩人地位等級差距超過了m,就不能"間接交易",

但酋長的等級不一定最高

分析:求有等級限制的最短路,可以將每個物品(包括酋長允諾)看成乙個結點,

替代品間的***為邊的權值,建圖,但是為有向圖。

因為酋長的允諾是終點,必須確定起點才能求最短路。

可以設立編號為0的點,它與物品i的邊權值都為物品i的**。

可用dijistra求最短路,加入等級判斷條件即可。

#include#include#include#define n 110

#define inf 1e8

struct rep;

struct stugoods[n];

int m,n,map[n][n];

int dijikstra(int rank)

for(i=1;i<=n;i++)

if(goods[i].rank>=rank&&goods[i].rank-rank<=m)//大於選定點等級並且等級差小於m才可替代

dis[i]=map[pos][i];

dis[pos]=0;

visit[pos]=true;

for(i=1;i<=n;i++)

}return dis[1];

}int main()

for(i=1;i<=n;i++)

for(j=1;j<=goods[i].num;j++)

}int ans=inf,temp;

for(i=1;i<=n;i++)

printf("%d\n",ans);

}return 0;

}

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