【bzoj2563】【阿狸和桃子的游戏】【贪心】
生活随笔
收集整理的這篇文章主要介紹了
【bzoj2563】【阿狸和桃子的游戏】【贪心】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Description
阿貍和桃子正在玩一個游戲,游戲是在一個帶權(quán)圖 G=(V, E) 上進(jìn)行的,設(shè)節(jié)點權(quán)值為 w(v) ,邊權(quán)為 c(e) 。游戲規(guī)則是這樣的:1.? 阿貍和桃子輪流將圖中的頂點染色,阿貍會將頂點染成紅色,桃子會將頂點染成粉色。已經(jīng)被染過色的點不能再染了,而且每一輪都必須給一個且僅一個頂點染色。
2.? 為了保證公平性,節(jié)點的個數(shù) N 為偶數(shù)。
3.? 經(jīng)過 N/2 輪游戲之后,兩人都得到了一個頂點集合。對于頂點集合 S ,得分計算方式為
。
由于阿貍石頭剪子布輸給了桃子,所以桃子先染色。兩人都想要使自己的分?jǐn)?shù)比對方多,且多得越多越好。如果兩人都是采用最優(yōu)策略的,求最終桃子的分?jǐn)?shù)減去阿貍的分?jǐn)?shù)。
Input
輸入第一行包含兩個正整數(shù)N和M,分別表示圖G的節(jié)點數(shù)和邊數(shù),保證N一定是偶數(shù)。
接下來N+M行。
前N行,每行一個整數(shù)w,其中第k行為節(jié)點k的權(quán)值。
后M行,每行三個用空格隔開的整數(shù)a b c,表示一條連接節(jié)點a和節(jié)點b的邊,權(quán)值為c。
Output
輸出僅包含一個整數(shù),為桃子的得分減去阿貍的得分。
Sample Input
4 46
4
-1
-2
1 2 1
2 3 6
3 4 3
1 4 5
Sample Output
3數(shù)據(jù)規(guī)模和約定
對于40%的數(shù)據(jù),1 ≤ N ≤ 16。
對于100%的數(shù)據(jù),1 ≤ N ≤ 10000,1 ≤ M ≤ 100000,-10000 ≤ w , c ≤ 10000。
題解: 考慮如果只有點的話肯定是每次選權(quán)值最大的點。 我們只要保證不同的人選同一條邊的兩端點時這條邊的權(quán)值不會加給任何一個人即可。 所以我們把每條邊的權(quán)值平均分到兩個點上去即可。 然后排一遍序每次選最大的即可。 代碼: #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> #define N 10010 using namespace std; priority_queue<double>q; int x,n,m; double v[N]; double a,b; struct use{int st,en;}e[N*10]; int main(){scanf("%d%d",&n,&m);for (int i=1;i<=n;i++) scanf("%lf",&v[i]);for (int i=1;i<=m;i++){scanf("%d%d%d",&e[i].st,&e[i].en,&x);v[e[i].st]+=(double)x/2.0;v[e[i].en]+=(double)x/2.0;} for (int i=1;i<=n;i++) q.push(v[i]);for (int i=1;i<=n/2;i++){a+=q.top();q.pop();b+=q.top();q.pop(); }cout<<a-b<<endl; }
總結(jié)
以上是生活随笔為你收集整理的【bzoj2563】【阿狸和桃子的游戏】【贪心】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 厦门大学计算机保研学校,郑炜-厦门大学计
- 下一篇: 清明。。只是扫墓。。