洛谷P1768 天路 負環 二分 數論

2022-09-01 10:45:08 字數 1800 閱讀 1803

乙個有向圖,每條邊有權值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]≤

ans∑

p[i]

∑v[i

]​≤a

ns移項得∑v[

i]≤a

ns×∑

p[i]

∑v[i

]≤an

s×∑p

[i]再次移項得∑(

p[i]

×ans

)−∑v

[i]≥

0∑(p

[i]×

ans)

−∑v[

i]≥0

也就是說∑(

p[i]

×ans

−v[i

])≥0

∑(p[

i]×a

ns−v

[i])

≥0於是我們可以把所有的邊的邊權更改為p[i

]×an

s−v[

i]p[

i]×a

ns−v

[i],只要現在圖中有任意乙個環得邊權和為負數,那麼ans

ans就是不符合要求的。

那就二分ans

ans。題目中說了保證答案不超過200,於是時間複雜度就是o(n

mlog

(200))

o(nm

log(

200)

)。

#include

#include

#include

using

namespace std;

const

int n=

7010

;const

int m=

30010

;int n,m,x,y,v,p,tot,head[n]

;double l,r,mid,dis[n]

;bool vis[n]

;struct edge

e[m]

;void

add(

int from,

int to,

int v,

int p)

bool

spfa

(int x)

//dfs版spfa1求負環

} vis[x]=0

;return1;

}int

main()

for(

int i=

1;i<=n;i++

)add(0

,i,0,0

);l=0;

r=200;

while

(r-l>

0.01)if

(l==0)

printf

("-1");

else

printf

("%0.1lf"

,l);

return0;

}

洛谷P1768 天路

那是一條神奇的天路誒 把第乙個神犇送上天堂 xdm先生唱著這首 親切 的歌曲,一道猥瑣題目的靈感在腦中出現了。和c sunshine大神商量後,這道猥瑣的題目終於出現在本次試題上了,旨在難到一幫大腦不夠靈活的oier們 johnkram真的不是說你 言歸正傳,小x的夢中,他在 開了一家大型旅遊公司,...

天路 洛谷p1768

那是一條神奇的天路誒 把第乙個神犇送上天堂 xdm先生唱著這首 親切 的歌曲,一道猥瑣題目的靈感在腦中出現了。和c sunshine大神商量後,這道猥瑣的題目終於出現在本次試題上了,旨在難到一幫大腦不夠靈活的oier們 johnkram真的不是說你 言歸正傳,小x的夢中,他在 開了一家大型旅遊公司,...

洛谷 P1083 借教室 二分 差分陣列

在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。面對海量租借教室的資訊,我們自然希望程式設計解決這個問題。我們需要處理接下來n nn天的借教室資訊,其中第i ii天學校有r ir i ri 個...