時空限制 1000ms / 128mb
題目描述
給出一張有n個點m條邊的加權有向無環圖,接下來有q個詢問,每個詢問包括2個節點x和y,要求算出從x到y的一條路徑,使得密度最小(密度的定義為,路徑上邊的權值和除以邊的數量)。
輸入格式:
第一行包括2個整數n和m。
以下m行,每行三個數字a、b、w,表示從a到b有一條權值為w的有向邊。
再下一行有乙個整數q。
以下q行,每行乙個詢問x和y,如題意所訴。
輸出格式:
對於每個詢問輸出一行,表示該詢問的最小密度路徑的密度(保留3位小數),如果不存在這麼一條路徑輸出「omg!」(不含引號)。
說明1 ≤ n ≤ 50,1 ≤ m ≤ 1000,1 ≤ w ≤ 100000,1 ≤ q ≤ 100000
題目分析
d p[
i][j
][k]
dp[i][j][k]
dp[i][
j][k
]表示從i
ii到j
jj經過k
kk條邊的所有路徑中的最小密度值
n範圍很小,直接跑floyd即可
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
typedef
long
long lt;
typedef
double dd;
intread()
while
(ss>=
'0'&&ss<=
'9')
return f*x;
}const dd inf=
1e9;
const
int maxn=
110;
int n,m,q;
dd dp[maxn]
[maxn]
[maxn*10]
;int
main()
for(
int t=
2;t<=m;
++t)
for(
int x=
1;x<=n;
++x)
for(
int y=
1;y<=n;
++y)
for(
int k=
1;k<=n;
++k)
dp[x]
[y][t]
=min
(dp[x]
[y][t]
,dp[x]
[k][t-1]
+dp[k]
[y][1]
);q=
read()
;while
(q--
)return0;
}
最小密度路徑 洛谷p1730
給出一張有n個點m條邊的加權有向無環圖,接下來有q個詢問,每個詢問包括2個節點x和y,要求算出從x到y的一條路徑,使得密度最小 密度的定義為,路徑上邊的權值和除以邊的數量 輸入格式 第一行包括2個整數n和m。以下m行,每行三個數字a b w,表示從a到b有一條權值為w的有向邊。再下一行有乙個整數q。...
洛谷P1730 最小密度路徑
題目大意 給定乙個 n 個點,m 條邊的有向圖,現有 q 個詢問,每次詢問 x 到 y 的最小密度路徑是多少。最小密度路徑的定義是路徑長度除以路徑邊數。題解 利用矩陣乘法,可以預處理出從 x 到 y 恰好經過 k 條邊的最短路是多少。對於每次詢問,直接處理處理即可,時間複雜度為 o n 4 注意 恰...
P1730 最小密度路徑 floyed
給出一張有n個點m條邊的加權有向無環圖,接下來有q個詢問,每個詢問包括2個節點x和y,要求算出從x到y的一條路徑,使得密度最小 密度的定義為,路徑上邊的權值和除以邊的數量 輸入格式 第一行包括2個整數n和m。以下m行,每行三個數字a b w,表示從a到b有一條權值為w的有向邊。再下一行有乙個整數q。...