阿狸和桃子正在玩乙個遊戲,遊戲是在乙個帶權圖
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-2
1 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。
題解:考慮如果只有點的話肯定是每次選權值最大的點。
我們只要保證不同的人選同一條邊的兩端點時這條邊的權值不會加給任何乙個人即可。
所以我們把每條邊的權值平均分到兩個點上去即可。
然後排一遍序每次選最大的即可。
**:
#include#include#include#include#include#define n 10010
using namespace std;
priority_queueq;
int x,n,m;
double v[n];
double a,b;
struct usee[n*10];
int main()
for (int i=1;i<=n;i++) q.push(v[i]);
for (int i=1;i<=n/2;i++)
cout<
}
BZOJ 2563 阿狸和桃子的遊戲
description 阿狸和桃子正在玩乙個遊戲,遊戲是在乙個帶權圖g v,e 上進行的,設節點權值為w v 邊權為c e 遊戲規則是這樣的 1.阿狸和桃子輪流將圖中的頂點染色,阿狸會將頂點染成紅色,桃子會將頂點染成粉色。已經被染過色的點不能再染了,而且每一輪都必須給乙個且僅乙個頂點染色。2.為了保...
bzoj2563 阿狸和桃子的遊戲
題目 如果只有點或邊的話,十分簡單對吧,但是,現在都有。怎麼辦呢?我們可以吧邊權分在點上,怎麼分,一般的想法就是對半分。但這樣對不對呢?感性認識,由於是算分差,如果兩個人各選了一條邊的乙個端點,沒有影響,不然的話,選了兩個端點的人能超乙個邊權。那,這樣就是對的。排序後,輕鬆解決。include us...
bzoj2563阿狸和桃子的遊戲
bzoj2563阿狸和桃子的遊戲 題意 乙個n 偶數 點圖,節點權值為w v 邊權為c e 兩人輪流將圖中的頂點染色,已經被染過色的點不能再染了,而且每一輪都必須給乙個且僅乙個頂點染色。染完後每個人的分數為染過的點權和以及兩個端點都被染的邊權和。如果兩人都是採用最優策略的,求最終第乙個人的分數減去第...