國家集訓隊 阿狸和桃子的遊戲

2022-05-20 14:03:15 字數 728 閱讀 7531

對於兩點之間的邊是不好處理的,但基於觀察可以發現:雙方都只會將點染色,因此我們的想法是將邊權放到點權上去然後構造出一種選擇點權的方案與原問題等價。

同時,因為對於一條邊而言它連線的兩點代價是一致的,因此下放點權的過程應該滿足對稱性。

此時基於觀察可以發現:

那麼我們只需要調整下方的大小使得當 \(u, v\) 同時被選時獲得的權值恰好邊權即可。

不難發現有且僅有 \(\frac\) 滿足要求。

但因為 \(w\) 可能為奇數不方便計算,因此我們開始將所有權值擴大一倍最後將答案減半即可。

於是問題就被轉化為:先手後手每次可以取乙個點獲得這個點的點權,問對抗博弈後先手減後手的得分。

不難發現此時先後手的策略都一定是取每次剩下的最大值,排序一遍即可,複雜度 \(o(n \log n + m)\)。

#include using namespace std;

#define rep(i, l, r) for (int i = l; i <= r; ++i)

const int n = 10000 + 5;

int n, m, u, v, w, ans, a[n];

int read()

while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return x * f;

}signed main()

P4643 國家集訓隊 阿狸和桃子的遊戲

把邊權轉換為點權。具體來說,把一條邊的邊權各一半加到兩個頂點上,然後每個人選的時候,貪心的選取點權最大的點即可。如果一條邊的兩個頂點被同乙個人選上了,那麼它就會額外提供等同於邊權的貢獻 否則的話,兩個人每人都有一半邊權的收益,相當於這條邊誰也沒給,也是符合題意的。include include in...

P4643 國家集訓隊 阿狸和桃子的遊戲

miku 貪心,只有點權的時候顯然好做,但是還有邊權怎麼辦呢 假設這裡有一條邊,邊權為2v,然後兩個點的點權為a,b,我們把邊權分成兩部分,然後平攤到兩個點上,那麼 邊權變成了a v,b v 假如一人選了乙個選了 那麼a v b v 和a b一樣。同理,假如兩個都歸了乙個人,那麼a v b v和 a...

貪心 阿狸和桃子的遊戲

顯然,這道題目的點權很容易去分配,其關鍵便在於邊權的處理上,即如何處理兩種邊權的情況。還有乙個問題在於,什麼叫做當前的最優選擇,點權和邊權的不同意味著有不同的選擇方法,這也讓這道題變得非常的棘手。我們便來思考一下,如何解決這兩個問題呢?那麼如何將邊權轉移到點權上呢?觀察到特殊的性質,我們發現題目僅僅...