BZOJ 2563 阿狸和桃子的遊戲

2022-04-30 11:15:13 字數 1540 閱讀 5971

time limit: 3 sec  memory limit: 128 mb

submit: 713  solved: 504

[submit][status][discuss]

阿狸和桃子正在玩乙個遊戲,遊戲是在乙個帶權圖g=(v, e)上進行的,設節點權值為w(v),邊權為c(e)。遊戲規則是這樣的:

1. 阿狸和桃子輪流將圖中的頂點染色,阿狸會將頂點染成紅色,桃子會將頂點染成粉色。已經被染過色的點不能再染了,而且每一輪都必須給乙個且僅乙個頂點染色。

2. 為了保證公平性,節點的個數n為偶數。

3. 經過n/2輪遊戲之後,兩人都得到了乙個頂點集合。對於頂點集合s,得分計算方式為

。由於阿狸石頭剪子布輸給了桃子,所以桃子先染色。兩人都想要使自己的分數比對方多,且多得越多越好。如果兩人都是採用最優策略的,求最終桃子的分數減去阿狸的分數。

輸入第一行包含兩個正整數n

和m,分別表示圖g的節點數和邊數,保證n一定是偶數。

接下來n+m行。

前n行,每行乙個整數w,其中第k行為節點k的權值。

後m行,每行三個用空格隔開的整數a b c,表示一條連線節點a和節點b的邊,權值為c。

輸出僅包含乙個整數,為桃子的得分減去阿狸的得分。

4 464-1

-21 2 1

2 3 6

3 4 3

1 4 5

3資料規模和約定

對於40%的資料,1 ≤ n ≤ 16。

對於100%的資料,1 ≤ n ≤ 10000,1 ≤ m ≤ 100000,-10000 ≤ w , c ≤ 10000。

2012國家集訓隊round 1 day2

[submit][status][discuss]

注意只要求輸出最後兩人得分的差值,而非每個人的最終得分。考慮把邊的權值表示在點上:

對於一條邊(u,v,c),我們另w'[u] = w[u] + c/2,w'[v] = w[v] + c/2,如果u,v都被阿狸占領,則阿狸在邊權上額外獲得的差值為c,剛好是攤在兩個點的w'上的c/2 + c/2 = c;如果u,v分別被占領,則兩人的得分差值剛好不會受到這條邊的權值的影響,也符合實際情況。所以只要這樣把每條邊的權值攤在u,v點的權值上,排序後兩人貪心選取(從大到小的話,先手選奇數,後手選偶數)即可。

1 #include 2 #include 3 #include 4 #include 5 #include 6

7 inline int next(void

) 17

18 signed main(void

) 31 std::sort(w + 1, w + 1 +n);

32long

long answer = 0;33

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

34 answer += (i & 1 ? -1 : 1) *w[i];

35 printf("

%lld\n

", answer / 2

);36 }

@author: yousiki

BZOJ 2563 阿狸和桃子的遊戲

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

bzoj2563 阿狸和桃子的遊戲

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

bzoj2563阿狸和桃子的遊戲

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