題意:給定一張有向稠密圖和通過每條邊的時間和路程,問從1到n的路程/時間 最大為多少
正解:spfa+二分答案
開始做的時候,想直接跑圖論,後來發現好像不對(不然資料範圍怎麼這麼小)
但是顯然要用到圖論,機智的我就想到了二分答案。
考慮,假如有乙個ans,那麼如果存在length i / time i >=ans(i屬於路徑上的邊),那麼顯然更優 ,則可發現問題可轉換為如果乙個答案更優,那麼對於以 length i - ans*time i 為權值,重新構的圖中,如果到達n的最長路不小於n,顯然答案可以更優,只需要二分答案就可以了.另外如果有正權環顯然是可以的
唯獨要注意的是,精度要求要滿足題意,顯然不能只分到第三位小數就停了,那樣的話會gi
#include#include#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 101
;int
n;int
tim[maxn][maxn],s[maxn][maxn];
long
double
ju[maxn][maxn];
double
dis[maxn];
bool
vis[maxn];
int num[maxn];//
記錄經過次數,判環
long
double
ans;
//二分答案+spfa
queue
q;inline
intgetint()
inline
bool work(long
double x)}}
}if(dis[n]>=0) return
true;//
存在更優的答案
return
false;}
intmain()
printf(
"%.3lf
",(double
)l);
return0;
}
Codevs 1183 泥濘的道路
1183 泥濘的道路 時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 傳送門題目描述 description cs有n個小區,並且任意小區之間都有兩條單向道路 a到b,b到a 相連。因為最近下了很多暴雨,很多道路都被淹了,不同的道路泥濘程度不同。小a經過對近期天氣和地...
Codevs 1183 泥濘的道路
1183 泥濘的道路 時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題解 檢視執行結果 題目描述 description cs有n個小區,並且任意小區之間都有兩條單向道路 a到b,b到a 相連。因為最近下了很多暴雨,很多道路都被淹了,不同的道路泥濘程度不同。小a經過...
Codevs1183 泥濘的道路
cs有n個小區,並且任意小區之間都有兩條單向道路 a到b,b到a 相連。因為最近下了很多暴雨,很多道路都被淹了,不同的道路泥濘程度不同。小a經過對近期天氣和地形的科學分析,繪出了每條道路能順利通過的時間以及這條路的長度。現在小a在小區1,他希望能夠很順利地到達目的地小區n,請幫助小明找出一條從小區1...