題意:探險家想娶酋長的女兒,需要昂貴的聘禮,
但可以用其他物品加***替代,其他物品也可用另外的物品和***替代,
求探險家最少需多少金幣可以娶到酋長的女兒?
注意:等級限制:如果兩人地位等級差距超過了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...