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