HDOJ 3790 最短路徑問題(雙權值最短路)

2021-07-22 03:46:57 字數 1256 閱讀 3476

problem description

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。

input

輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t;起點s,終點。n和m為0時輸入結束。 (1

output

輸出 一行有兩個數, 最短距離及其花費。

sample input

3 2

1 2 5 6

2 3 4 5

1 30 0

sample output

9 11

解題思路:雙權值最短路,當dis[e.to] > dis[u] + e.dis時更新路徑和花費,當dis[e.to] == dis[u] + e.dis且cost[e.to] > cost[u] + e.cost僅更新花費。

**如下:

#include #define inf int_max / 10

using namespace std;

const int maxn = 1005;

const int maxm = 100005;

int dis[maxn],cost[maxn];

int n,m;

struct edge

edge(){}

};struct node

node(){}

bool operator < (const node& a)const

};vectorg[maxn];

priority_queueque;

void init()

void add_edge(int from,int to,int dis,int cost)

void dijksta(int s)

else if(dis[e.to] == dis[u] + e.dis)

}} }

return ;

}int main()

scanf("%d %d",&a,&b);

dijksta(a);

printf("%d %d\n",dis[b],cost[b]);

} return 0;

}

3790 最短路徑問題

問題 problem description 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。input 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,...

hdoj最短路徑問題

description 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。input 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p...

hdu3790 最短路徑問題

wa了無數次,終於過了,還是dijkstra,只不過在距離,相同時,多判斷一下時間。注意重邊!include include include define m 0x7fffffff using namespace std struct p 2000 struct c 1020 1020 int vi...