poj 1062 dijkstra 列舉區間

2021-09-30 19:22:19 字數 1104 閱讀 5434

要求: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...