「那是一條神奇的天路誒~,把第乙個神犇送上天堂~」,xdm先生唱著這首「親切」的歌曲,一道猥瑣題目的靈感在腦中出現了。
和c_sunshine大神商量後,這道猥瑣的題目終於出現在本次試題上了,旨在難到一幫大腦不夠靈活的oier們(johnkram真的不是說你……)。
言歸正傳,小x的夢中,他在**開了一家大型旅遊公司,現在,他要為**的各個景點設計一組鐵路線。但是,小x發現,來旅遊的遊客都很挑剔,他們乘火車在各個景點間遊覽,景點的趣味當然是不用說啦,關鍵是路上。試想,若是乘火車一圈轉悠,卻發現回到了遊玩過的某個景點,花了一大堆錢卻在路上看不到好的風景,那是有多麼的惱火啊。
所以,小x為所有的路徑定義了兩個值,vi和pi,分別表示火車線路的風景趣味度和乘坐一次的**。現在小x想知道,乘客從任意乙個景點開始坐火車走過的一條回路上所有的v之和與p之和的比值的最大值。以便為顧客們推薦一條環繞旅遊路線(路線不一定包含所有的景點,但是不可以存在重複的火車路線)。
於是,小x夢醒之後找到了你……
輸入格式:
第一行兩個正整數n,m,表示有n個景點,m條火車路線,火車路線是單向的。
以下m行,每行4個正整數,分別表示一條路線的起點,終點,v值和p值。
注意,兩個頂點間可能有多條軌道,但一次只能走其中的一條。
輸出格式:
乙個實數,表示一條回路上最大的比值,保留1位小數。
若沒有迴路,輸出-1。
輸入樣例#1:複製
5 6輸出樣例#1:複製1 2 1 1
4 1 6 2
5 4 8 1
2 3 2 2
5 2 4 1
3 5 6 4
2.3對於30%的資料,1≤n≤100,1≤m≤20;
對於60%的資料,1≤n≤3,000,1≤m≤2,000;
對於100%的資料,1≤n≤7,000,1≤m≤20,000,1≤vi,pi≤1,000.
保證答案在200以內.
題解:01分數規劃二分答案,dfs判是否存在正環即可。
#include#define f(i,l,r) for(i=(l);i<=(r);i++)
using namespace std;
const int maxn=7005,maxm=20005,inf=1e20;
double eps=1e-3;
struct edgee[maxm<<1];
int h[maxn],tot,flag;
int n,m;
double dis[maxn];
int vis[maxn];
inline void add(int u,int v,int w,int p)
; h[u]=tot++;
}void dfs(int u)
while(r-l>eps)
if(l) cout<
else cout<
return 0;
}
洛谷P1768 天路
那是一條神奇的天路誒 把第乙個神犇送上天堂 xdm先生唱著這首 親切 的歌曲,一道猥瑣題目的靈感在腦中出現了。和c sunshine大神商量後,這道猥瑣的題目終於出現在本次試題上了,旨在難到一幫大腦不夠靈活的oier們 johnkram真的不是說你 言歸正傳,小x的夢中,他在 開了一家大型旅遊公司,...
洛谷P1768 天路 負環 二分 數論
乙個有向圖,每條邊有權值v i p i v i p i 你需要找到乙個環,使得 v i p i p i v i 盡量大。看到 v i p i p i v i 很容易想到是一道01分數規劃問題。我們設ans max ans max,那麼對於任意的 v i p i p i v i 都有 v i p i ...
洛谷 P1807最長路
設g為有n個頂點的有向無環圖,g中各頂點的編號為1到n,且當為g中的一條邊時有i j。設w i,j 為邊的長度,請設計演算法,計算圖g中 1,n 間的最長路徑。輸入格式 輸入檔案longest.in的第一行有兩個整數n和m,表示有n個頂點和m條邊,接下來m行中每行輸入3個整數a,b,v 表示從a點到...