要求:n個點每個點有乙個權值和等級,每個點有x條有向邊,有向邊也有權值。從第1個點出發,到每個點的路徑的權值等於每條邊的權值加上終點的權值。路徑的等級最大值與等級最小值的差值不大於m,終點可以是第1個點。求路徑權值最小值。
方法:dijkstra 列舉區間
1.dijkstra求最短路時注意列舉區間等級下限和等級上限。
2.注意點也有權值。
#include#include#include#include#include#include#include#define inf 0x3f3f3f3f
using namespace std ;
int m , n ;
bool vis[105] ;
int dis[105] ;
int map1[105][105] ;
struct node
node1[105];
int dijkstra(int a , int b)
if(!flag)
break ;
vis[temp] = 1 ;
for(j = 1 ; j <= n ; j ++)
if(node1[temp].l >= a && node1[temp].l <= b
&&node1[j].l >= a && node1[j].l <= b)
dis[j] = min(dis[j] , dis[temp] + map1[temp][j]) ;
} for(i = 1 ; i <= n ; i ++)
if(node1[i].l >= a && node1[i].l <= b)
ans = min(ans , dis[i] + node1[i].p) ;
return ans ;
}int main()
map1[i][i] = 0 ;
} ans = inf ;
for(i = 0 ; i <= m ; i ++)
ans = min(ans , dijkstra(node1[1].l - m + i , node1[1].l + i)) ;
printf("%d\n" , ans) ;
}
昂貴的聘禮 poj 1062 Dijkstra
中文題,題意就不多說了,講講思路吧,先根據題意構圖,與普通最短路不同的是這一題加了乙個rank,每個點都有乙個rank,題目要求最短路徑上的點的rank的最大差值在 m範圍內,dijkstra判斷條件時加上rank約束就行了。我沒有新增匯點直接寫的,另貼上別人新增匯點的寫法。我的 include i...
POJ1062 Dijkstra 昂貴的聘禮
description 年輕的探險家來到了乙個印第安部落裡。在那裡他和酋長的女兒相愛了,於是便向酋長去求親。酋長要他用10000個金幣作為聘禮才答應把女兒嫁給他。探險家拿不出這麼多金幣,便請求酋長降低要求。酋長說 嗯,如果你能夠替我弄到大祭司的皮襖,我可以只要8000金幣。如果你能夠弄來他的水晶球,...
昂貴的聘禮(POJ1062 Dijkstra)
題目鏈結 昂貴的聘禮 time limit 1000ms memory limit 10000k total submissions 32225 accepted 9151 description 年輕的探險家來到了乙個印第安部落裡。在那裡他和酋長的女兒相愛了,於是便向酋長去求親。酋長要他用1000...