2024.6 做題記錄

dingzibo_qwq發表於2024-06-06

2024.6 做題記錄

[JSOI2009] 球隊收益 / 球隊預算

考慮到要求最小總支出,想到最小費用流。

首先容易發現,每場比賽都只有兩種可能,即甲輸乙贏或甲贏乙輸。但是這樣我們在跑費用流的時候顯然需要考慮對於兩個因素同時的影響,顯然這樣不好做。我們不妨假設剩下的比賽所有人都輸,那麼我們就只需要考慮每一場比賽贏的貢獻即可。

現在我們先考慮建圖。首先有 \((s,ss,m,0)\) 表示 \(m\) 場比賽的限制,然後應該有 \((s_i,i+n,1,0),(t_i,i+n,1,0),(i+n,t,1,0)\),也就是從比賽雙方球隊向比賽連邊,流量是 \(1\)。然後再從比賽向匯點連邊,流量為 \(1\),這樣就可以限制每場比賽的勝利者只有一個。

現在的問題就在於如何計算贏一場比賽的貢獻,也就是 \(ss\) 和球隊 \(i\) 之間怎樣連邊。

考慮我們原先假設的是所有球隊都輸,於是如果一支球隊在 \(m\) 場比賽中打了 \(p_i\) 場,原先的費用就應該是 \(c_i{a_i}^2+d_i(b_i+p_i)^2\)。現在考慮如果這支球隊贏了 \(q_i\) 場,那麼現在的費用就是 \(c_i(a_i+q_i)+d_i(b_i+p_i-q_i)^2\)。現在對兩者做差,就可以求出贏 \(q_i\) 場對答案的貢獻為:

\[2(a_ic_i-b_id_i-d_ip_i)q_i+(c_i+d_i){q_i}^2 \]

如果將 \(q_i\) 看作流量,那麼發現式子中出現了平方費用流,考慮拆邊處理。設上式中 \(q_i\) 係數為 \(A\)\({q_i}^2\) 係數為 \(B\),則我們從 \(ss\)\(i\) 連邊 \((1,A+B),(1,A+3B),(1,A+5B),\cdots,(1,A+(2p_i-1)B)\)。其實相當於將原來 \(q_i\) 的流量拆成 \(1\) 的流量,然後累加起來達到平方費用的效果。

最後我們跑最小費用最大流,最小費用再加上假設所有隊都輸的費用就是最後答案。