日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[bzoj2563]阿狸和桃子的游戏

發布時間:2024/1/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [bzoj2563]阿狸和桃子的游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2563: 阿貍和桃子的游戲

Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 518 Solved: 369
[Submit][Status][Discuss]
Description

  阿貍和桃子正在玩一個游戲,游戲是在一個帶權圖G=(V, E)上進行的,設節點權值為w(v),邊權為c(e)。游戲規則是這樣的:
  1. 阿貍和桃子輪流將圖中的頂點染色,阿貍會將頂點染成紅色,桃子會將頂點染成粉色。已經被染過色的點不能再染了,而且每一輪都必須給一個且僅一個頂點染色。
  2. 為了保證公平性,節點的個數N為偶數。
  3. 經過N/2輪游戲之后,兩人都得到了一個頂點集合。對于頂點集合S,得分計算方式為 。
  由于阿貍石頭剪子布輸給了桃子,所以桃子先染色。兩人都想要使自己的分數比對方多,且多得越多越好。如果兩人都是采用最優策略的,求最終桃子的分數減去阿貍的分數。
 
Input

 輸入第一行包含兩個正整數N和M,分別表示圖G的節點數和邊數,保證N一定是偶數。
  接下來N+M行。
  前N行,每行一個整數w,其中第k行為節點k的權值。
  后M行,每行三個用空格隔開的整數a b c,表示一條連接節點a和節點b的邊,權值為c。

 
Output

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

Sample Input

4 464-1-21 2 12 3 63 4 31 4 5

Sample Output

3

數據規模和約定

對于40%的數據,1 ≤ N ≤ 16。對于100%的數據,1 ≤ N ≤ 10000,1 ≤ M ≤ 100000,-10000 ≤ w , c ≤ 10000。

這道題里給出的計算方式跟文理分科非常相似,每條邊相當于一對關系,如果這條邊的兩個端點同時選就能獲得這條邊的代價。
可以考慮一下如果這個題只有點權的話,那么最優的策略就是每次選最大的。
那么只要把圖中的邊去掉就行了。像文理分科一樣,兩個端點的權值分別變成 v[V]+v[E]2 。文理分科中還有一種兩個點之間連的邊,表示的是如果兩個點選的集合不一樣要報邊的代價減去。
這個題要求的是兩個人的差,那么如果兩個端點選的集合不一樣的,那么在相減的過程中也就減掉了邊的代價。

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=10010; int n,m,v[N]; inline int in(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return x*f; } int main(){int i,x,y,z,ans=0;n=in();m=in();for(i=1;i<=n;++i) v[i]=2*in();for(i=1;i<=m;++i){x=in();y=in();z=in();v[x]+=z;v[y]+=z;}sort(v+1,v+n+1);for(i=n;i;--i) ans+=v[i]*(i%2?-1:1);printf("%d\n",ans/2); }

總結

以上是生活随笔為你收集整理的[bzoj2563]阿狸和桃子的游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。