把邊權轉換為點權。具體來說,把一條邊的邊權各一半加到兩個頂點上,然後每個人選的時候,貪心的選取點權最大的點即可。
如果一條邊的兩個頂點被同乙個人選上了,那麼它就會額外提供等同於邊權的貢獻;否則的話,兩個人每人都有一半邊權的收益,相當於這條邊誰也沒給,也是符合題意的。
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int maxn =
2e5+7;
ll val[maxn]
,num[maxn]
,n,m;
bool
cmp1
(long
long a,
long
long b)
intmain()
sort
(val+
1,val+
1+n,cmp1)
; ll ans=0;
for(
int i=
1;i) ans+
=val[i]
-val[i+1]
; cout<}
P4643 國家集訓隊 阿狸和桃子的遊戲
miku 貪心,只有點權的時候顯然好做,但是還有邊權怎麼辦呢 假設這裡有一條邊,邊權為2v,然後兩個點的點權為a,b,我們把邊權分成兩部分,然後平攤到兩個點上,那麼 邊權變成了a v,b v 假如一人選了乙個選了 那麼a v b v 和a b一樣。同理,假如兩個都歸了乙個人,那麼a v b v和 a...
國家集訓隊 阿狸和桃子的遊戲
對於兩點之間的邊是不好處理的,但基於觀察可以發現 雙方都只會將點染色,因此我們的想法是將邊權放到點權上去然後構造出一種選擇點權的方案與原問題等價。同時,因為對於一條邊而言它連線的兩點代價是一致的,因此下放點權的過程應該滿足對稱性。此時基於觀察可以發現 那麼我們只需要調整下方的大小使得當 u,v 同時...
洛谷P4643 阿狸和桃子的遊戲
阿狸和桃子正在玩乙個遊戲,遊戲是在乙個帶權圖g v,e 上進行的,設節點權值為w v 邊權為c e 遊戲規則是這樣的 阿狸和桃子輪流將圖中的頂點染色,阿狸會將頂點染成紅色,桃子會將頂點染成粉色。已經被染過色的點不能再染了,而且每一輪都必須給乙個且僅乙個頂點染色。為了保證公平性,節點的個數n為偶數。經...