BZOJ 2563 阿狸和桃子的遊戲

2022-05-11 22:17:51 字數 1001 閱讀 1335

題意:給乙個n個加權點m條加權邊的無向圖,兩個人輪流拿走乙個點,最後使先手得分-後手得分盡量大。乙個人的得分等於拿到的點的點權和+邊的兩個端點在這個點集的邊的邊權和。(n<=10000, m<=100000)

#include using namespace std;

typedef long long ll;

ll a[10005], ans;

int main()

for(int i=1; i<=m; ++i)

sort(a+1, a+1+n);

for(int i=n; i>=1; i-=2)

ans+=a[i];

printf("%lld\n", ans);

return 0;

}

理解錯題意了真蛋疼......

以為是求先手要最大化自己的得分,後手也要最大化自己的得分,求最終先手得分-後手得分......qaq

其實是求,先手要最大化自己的得分-對方的得分.....................

於是就好做了(orz popoqqq

考慮先手的選擇對答案(先手得分-後手得分)的貢獻:

1、選乙個點$i$,$i$對答案貢獻$w[i]$

2、不選點$i$,$i$對答案貢獻$-w[i]$

3、選邊$i$的乙個端點,$i$對答案貢獻$0$

4、選邊$i$的兩個端點,$i$對答案貢獻$c[i]$

5、不選邊$i$的兩個端點,$i$對答案貢獻$-c[i]$

考慮初始化答案為$-(\sum w[i] + \sum c[i])$

再來考慮上述情況的對答案的貢獻:

1、貢獻了$2w[i]$

2、貢獻了$0$

3、貢獻了$c[i]$

4、貢獻了$2c[i]$

5、貢獻了$0$

於是發現對點重賦值可以做到上面的情況!

即對點重賦值為:$2w[i]+\sum_ c[(i, j)]$

然後每個人輪流取最大就是了= =

BZOJ 2563 阿狸和桃子的遊戲

description 阿狸和桃子正在玩乙個遊戲,遊戲是在乙個帶權圖g v,e 上進行的,設節點權值為w v 邊權為c e 遊戲規則是這樣的 1.阿狸和桃子輪流將圖中的頂點染色,阿狸會將頂點染成紅色,桃子會將頂點染成粉色。已經被染過色的點不能再染了,而且每一輪都必須給乙個且僅乙個頂點染色。2.為了保...

bzoj2563 阿狸和桃子的遊戲

題目 如果只有點或邊的話,十分簡單對吧,但是,現在都有。怎麼辦呢?我們可以吧邊權分在點上,怎麼分,一般的想法就是對半分。但這樣對不對呢?感性認識,由於是算分差,如果兩個人各選了一條邊的乙個端點,沒有影響,不然的話,選了兩個端點的人能超乙個邊權。那,這樣就是對的。排序後,輕鬆解決。include us...

bzoj2563阿狸和桃子的遊戲

bzoj2563阿狸和桃子的遊戲 題意 乙個n 偶數 點圖,節點權值為w v 邊權為c e 兩人輪流將圖中的頂點染色,已經被染過色的點不能再染了,而且每一輪都必須給乙個且僅乙個頂點染色。染完後每個人的分數為染過的點權和以及兩個端點都被染的邊權和。如果兩人都是採用最優策略的,求最終第乙個人的分數減去第...