少則無味多則醉

2021-10-19 11:50:07 字數 1877 閱讀 5128

題目描述

有 n

nn 種美酒,第 i

ii 種美酒有 a

ia_i

ai​ 兩(即 ai10

\frac

10ai​​

公升)。有 m

mm 條好漢,第 i

ii 位最多能喝 b

ib_i

bi​ 兩酒,但是沒有人會喝某一種酒超過 1

11 兩。由於酒杯容積是 1

11 兩,喝酒也只能喝 k(k

∈n

)k(k\in\n)

k(k∈n)

兩。為了不引起紛爭,要求酒被喝完,但是人不一定要喝醉,甚至可以不喝。

有時候,人的酒量會有 1

11 兩的變化,或者某種酒的量有 1

11 兩的變化。你需要回答,是否存在一種方案。

資料範圍與提示

n ≤1

05,q

≤105

n\le 10^5,\;q\le 10^5

n≤105,

q≤10

5 。考慮網路流,源點連出 a

ia_i

ai​ 容量的邊,匯點連入 b

ib_i

bi​ 容量的邊,中間的邊容量均為 1

11,問題轉化為最大流是否是 ∑ai

\sum a_i

∑ai​

。跑最大流肯定不行,考慮手算最小割。設割為 cut

(s,t

)cut(s,t)

cut(s,

t),即與源點直接相連的點中 s

ss 集合為 s

ss 部,與匯點直接相連的點中 t

tt 集合為 t

tt 部,則割的容量為

∣ s∣

⋅∣t∣

+∑i∉

sai+

∑i∉t

bi

|s|\cdot |t|+\sum_a_i+\sum_b_i

∣s∣⋅∣t

∣+i∈

/​s∑

​ai​

+i∈/

​t∑​

bi​

第一項是容量為 1

11 的邊的數量嘛。顯然 s,t

s,ts,

t 應當選最大的 ai,

bi

a_i,b_i

ai​,bi

​(求最小割嘛)。

不妨固定 s

ss 那麼 b

bb 放入 t

tt 則貢獻 ∣s∣

|s|∣s

∣ 否則貢獻 b

ib_i

bi​ 。所以 b

bb 的貢獻是 min⁡(

∣s∣,

bi

)\min(|s|,b_i)

min(∣s

∣,bi

​)。現在考慮 a,b

a,ba,

b 的變化。由於變化只有 1

11 ,所以大小順序不會變。線段樹維護每種 ∣s∣

|s|∣s

∣ 對應的最小值,那麼 a

ia_i

ai​ 的變化會導致 ∣s∣

≤n−i

|s|\le n-i

∣s∣≤n−

i 的值變化(不妨設 a

aa 是從小到大排序的)而 b

ib_i

bi​ 的變化會導致 ∣s∣

≥b

i|s|\ge b_i

∣s∣≥bi

​ 的值變化。線段樹可以維護。

複雜度 o(n

log⁡n)

\mathcal o(n\log n)

o(nlogn)