【BZOJ】2563: 阿狸和桃子的游戏

http://www.lydsy.com/JudgeOnline/problem.php?id=2563

题意:给一个n个加权点m条加权边的无向图,两个人轮流拿走一个点,最后使先手得分-后手得分尽量大。一个人的得分等于拿到的点的点权和+边的两个端点在这个点集的边的边权和。(n<=10000, m<=100000)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[10005], ans;
int main() {
	int n, m;
	scanf("%d%d", &n, &m);
	for(int i=1; i<=n; ++i) {
		scanf("%lld", &a[i]);
		ans-=a[i];
		a[i]<<=1;
	}
	for(int i=1; i<=m; ++i) {
		int x, y, w;
		scanf("%d%d%d", &x, &y, &w);
		a[x]+=w; a[y]+=w; ans-=w;
	}
	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_{(i, j) \in E} c[(i, j)]$

然后每个人轮流取最大就是了= =

时间: 2024-11-10 13:09:30

【BZOJ】2563: 阿狸和桃子的游戏的相关文章

bzoj 2563: 阿狸和桃子的游戏

开始写了一些东西但是后来浏览器挂了就没有存下来简直!!!!!!!!!!!!!QAQ 不想再写一遍了...总之是简单贪心. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #define MAXN 10005 7 using namespace std; 8 int n, m, a[M

BZOJ 2563 阿狸和桃子的游戏 贪心

题目大意:给定一张无向图,每个点有点权,每条边有边权,两个人轮流选择点,若一条边的两端点被选择则这条边被选择,两人都想自己的得分-对手的得分最大,求最终先手得分-后手得分 考虑先手选择每个点对答案的影响 一个点如果不选,本身对答案的贡献是-w 一个点如果选,本身对答案的贡献是w 一条边如果两个端点都不选,对答案的贡献是-c 如果两个端点中只选择一个,对答案的贡献是0 如果两个端点都选,对答案的贡献是c 那么我们先预先把所有的权值都在初始答案中减掉,然后就变成了: 一个点如果不选,本身对答案的贡献

阿狸和桃子的游戏题解

阿狸和桃子的游戏题解 每一道代码简单的黑题都有着诡异的思想,真不知道出题者怎么想的. 而这道题的重点在于把边权转换为点权, 此题的方式是将边权w平均分给被连接的两点u和v. 若u和v都被一人选择,则他的分数较不加边权前多了w/2+w/2=w, 若被不同的人选择,分数差多了(ans1+w/2)-(ans2-w/2)=ans1-ans2 并不会对答案有什么影响. 所以,最优策略? 肯定选择点权最大的了. 排序后依次选择即可. #include<bits/stdc++.h> using namesp

Bzoj2563 阿狸和桃子的游戏

Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 701  Solved: 496 Description 阿狸和桃子正在玩一个游戏,游戏是在一个带权图G=(V, E)上进行的,设节点权值为w(v),边权为c(e).游戏规则是这样的: 1. 阿狸和桃子轮流将图中的顶点染色,阿狸会将顶点染成红色,桃子会将顶点染成粉色.已经被染过色的点不能再染了,而且每一轮都必须给一个且仅一个顶点染色. 2. 为了保证公平性,节点的个数N为偶数. 3. 经过N/2轮游戏之

【BZOJ2563】阿狸和桃子的游戏 贪心

依然加链接 #include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/44499259"); } 题解: PoPoQQQ大爷已经说得很详细了. http://blog.csdn.net/PoPoQQQ/article/details/44495319 代码: #include <cstdio&g

bzoj2563阿狸和桃子的游戏

题意: 一个n(偶数)点图,节点权值为w(v),边权为c(e).两人轮流将图中的顶点染色,已经被染过色的点不能再染了,而且每一轮都必须给一个且仅一个顶点染色.染完后每个人的分数为染过的点权和以及两个端点都被染的边权和.如果两人都是采用最优策略的,求最终第一个人的分数减去第二个人的分数.n≤10000,边数≤100000 题解: 本弱只能引用神犇的题解 “ 考虑先手选择每个点对答案的影响 一个点如果不选,本身对答案的贡献是-w,一个点如果选,本身对答案的贡献是w,一条边如果两个端点都不选,对答案的

bzoj 2563 贪心 思想

2563: 阿狸和桃子的游戏 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 952  Solved: 682[Submit][Status][Discuss] Description 阿狸和桃子正在玩一个游戏,游戏是在一个带权图G=(V, E)上进行的,设节点权值为w(v),边权为c(e).游戏规则是这样的: 1. 阿狸和桃子轮流将图中的顶点染色,阿狸会将顶点染成红色,桃子会将顶点染成粉色.已经被染过色的点不能再染了,而且每一轮都必须给一个且仅一个

AC自动机:BZOJ 2434 阿狸的打字机

2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1834  Solved: 1053[Submit][Status][Discuss] Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小写字母,打字机的一个凹槽中会加入这个字母(这个字母加在凹槽

【BZOJ 1022】 [SHOI2008]小约翰的游戏John

1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 1375  Solved: 865 [Submit][Status] Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后一粒石子的人算输.小约翰相当固执,他坚持认为先取的人有很大的优