洛谷P4643 [国家集训队]阿狸和桃子的游戏 & 初赛心情
洛谷P4643 [国家集训队]阿狸和桃子的游戏
引入
其实是道小水题,没有那么多的数据结构和卡常。但是我就是喜欢这种题!giao!
(希望这道题不要变色啊……这可是我a的第一道黑题啊啊啊……
蒟蒻的心情激动不已啊
题目描述
阿狸和桃子正在玩一个游戏,游戏是在一个带权图G=(V, E)上进行的,设节点权值为w(v),边权为c(e)。游戏规则是这样的:
阿狸和桃子轮流将图中的顶点染色,阿狸会将顶点染成红色,桃子会将顶点染成粉色。已经被染过色的点不能再染了,而且每一轮都必须给一个且仅一个顶点染色。
为了保证公平性,节点的个数N为偶数。
经过N/2轮游戏之后,两人都得到了一个顶点集合。对于顶点集合S,得分计算方式为
\sum_{v \in S}w(v) + \sum_{e=(u,v)\in E \land u,v\in S}c(e)v∈S∑w(v)+e=(u,v)∈E∧u,v∈S∑c(e)
由于阿狸石头剪子布输给了桃子,所以桃子先染色。两人都想要使自己的分数比对方多,且多得越多越好。如果两人都是采用最优策略的,求最终桃子的分数减去阿狸的分数。
输入格式
输入第一行包含两个正整数N和M,分别表示图G的节点数和边数,保证N一定是偶数。
接下来N+M行。
前N行,每行一个整数w,其中第k行为节点k的权值。
后M行,每行三个用空格隔开的整数a b c,表示一条连接节点a和节点b的边,权值为c。
输出格式
输出仅包含一个整数,为桃子的得分减去阿狸的得分。
输入输出样例
4 4
6
4
-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。
Solution
先理解那个式子——
两个人依次选点
而最终的得分等于
选的点数的和
再加上其选的每两点之间的直接的边之和
即:一条边仅当它所连接的两个点都被同一个人所选,这条边的w才归这个人所有。
边和点都对答案有所影响,怎么办呢?要是只有点权就好了啊!
欸……那能不能把边权转化为点权呢?可以的!把边权对半分给边就好了!
我们从一张图中扣下来一条边,仔细分析一下:

如图,A和B是点(权),C是边(权)。
如果直接使用上面的性质我们可以分类讨论一下:
下面分4中情况
- 桃子把A和B都染成了粉色,那么桃子得到了这ABC的权ans=(A+C/2)+(B+C/2)=A+B+C;
- 桃子把A染成了粉色,阿狸把B染成了红色,那么得分为(A+C/2)-(B+C/2)=A-B;
- 桃子把B染成了粉色,阿狸把B染成了红色,那么得分为(B+C/2)-(A+C/2)=B-A;
- 阿狸把A和B都染成了红色,那么得分为-(A+C/2)-(B+C/2)=-(A+B+C);
发现这和暴力加是一样的!
所以,只要把边权平分到两个点上再进行排序,奇数偶数分配即可!
Code
1 #include<iostream>
2 #include<algorithm>
3 #include<cstdio>
4 #include<cstring>
5 #include<cmath>
6 #include<map>
7 #include<set>
8 #include<queue>
9 #include<vector>
10 #define IL inline
11 #define re register
12 #define LL long long
13 #define ULL unsigned long long
14 #define re register
15 using namespace std;
16
17 template<class T>inline void read(T&x)
18
19 {
20 char ch=getchar();
21 while(!isdigit(ch))ch=getchar();
22 x=ch-'0';ch=getchar();
23 while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
24 }
25 inline int read()
26 {
27 int x=0;
28 char ch=getchar();
29 while(!isdigit(ch))ch=getchar();
30 x=ch-'0';ch=getchar();
31 while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
32 return x;
33 }
34 int G[55];
35 template<class T>inline void write(T x)
36 {
37 int g=0;
38 do{G[++g]=x%10;x/=10;}while(x);
39 for(re int i=g;i>=1;--i)putchar('0'+G[i]);putchar('\n');
40 }
41 int n,m;
42 double ans,a[10010];
43 bool cmp(const double & a,const double & b){
44 return a>b;
45 }
46 int main()
47 {
48 cin>>n>>m;
49 for(int i=1;i<=n;i++) cin>>a[i];
50 for(int i=1,x,y;i<=m;i++)
51 {
52 double z;
53 cin>>x>>y>>z;
54 a[x]+=z/2;
55 a[y]+=z/2;
56 }
57 sort(a+1,a+n+1,cmp);
58 for(int i=1;i<=n;i++) if(i&1) ans+=a[i];else ans-=a[i];
59 cout<<ans;
60 return 0;
61 }

小结

心情不错,今天上午考完了初赛,估分77.5……希望能进复赛,当然,要是AFO的话……那就AFO吧……就当作是场错付吧……
(要是不会真的 “考完初赛回来A了一道黑题,结果发现今年AFO了”吧?)呸呸呸,乌鸦嘴
OVER
洛谷P4643 [国家集训队]阿狸和桃子的游戏 & 初赛心情的更多相关文章
- 洛谷P4643 [国家集训队]阿狸和桃子的游戏(思维题+贪心)
思维题,好题 把每条边的边权平分到这条边的两个顶点上,之后就是个sb贪心了 正确性证明: 如果一条边的两个顶点被一个人选了,一整条边的贡献就凑齐了 如果分别被两个人选了,一作差就抵消了,相当于谁都没有 ...
- P4643 [国家集训队]阿狸和桃子的游戏
传送门 这题看一眼就很不可做 考虑对于任意一个最终状态,对于一条边的贡献分成三种情况 如果此边连接的两点属于 $A$,那么对 $A$ 的贡献就是边权 $w$,即对答案的贡献为 $+w$ 如果两点都属于 ...
- luogu4643 [国家集训队]阿狸和桃子的游戏
题目链接:洛谷 这道题乍一看非常的难,而且题目标题上的标签让人很害怕. 但其实这道题并不难写(只要想到了...emm) 因为我们只需要知道两个人得分之差,所以我们可以对条件进行变换. 我们将边权平分到 ...
- 模板—点分治A(容斥)(洛谷P2634 [国家集训队]聪聪可可)
洛谷P2634 [国家集训队]聪聪可可 静态点分治 一开始还以为要把分治树建出来……• 树的结构不发生改变,点权边权都不变,那么我们利用刚刚的思路,有两种具体的分治方法.• A:朴素做法,直接找重心, ...
- [洛谷P1527] [国家集训队]矩阵乘法
洛谷题目链接:[国家集训队]矩阵乘法 题目背景 原 <补丁VS错误>请前往P2761 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入 ...
- 洛谷P1501 [国家集训队]Tree II(LCT,Splay)
洛谷题目传送门 关于LCT的其它问题可以参考一下我的LCT总结 一道LCT很好的练习放懒标记技巧的题目. 一开始看到又做加法又做乘法的时候我是有点mengbi的. 然后我想起了模板线段树2...... ...
- 洛谷P2619 [国家集训队2]Tree I(带权二分,Kruscal,归并排序)
洛谷题目传送门 给一个比较有逼格的名词--WQS二分/带权二分/DP凸优化(当然这题不是DP). 用来解决一种特定类型的问题: 有\(n\)个物品,选择每一个都会有相应的权值,需要求出强制选\(nee ...
- 洛谷 P1407 [国家集训队]稳定婚姻 解题报告
P1407 [国家集训队]稳定婚姻 题目描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的 ...
- 洛谷 P1852 [国家集训队]跳跳棋 解题报告
P1852 [国家集训队]跳跳棋 题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在\(a\),\(b\), ...
- 洛谷 P1501 [国家集训队]Tree II 解题报告
P1501 [国家集训队]Tree II 题目描述 一棵\(n\)个点的树,每个点的初始权值为\(1\).对于这棵树有\(q\)个操作,每个操作为以下四种操作之一: + u v c:将\(u\)到\( ...
随机推荐
- phpinclude-labs做题记录
Level 1 file协议 payload:?wrappers=/flag Level 2 data协议 去包含data协议中的内容其实相当于进行了一次远程包含,所以data协议的利用条件需要 ph ...
- ppt 文字 +图 样式 设计
1. 设计前 设计后 图 +文字排版 图多 字少
- golng切片实现分页
前言 实现切片分页,主要是根据选择页码和每页显示数量,计算了切片的开始.结束索引地址 package main import "math" func main() { slice1 ...
- Linux指令详解之:ctl相关命令大礼包
目录 6.4 服务管理命令(ctl大礼包) 6.4.1 systemctl 6.5.2 systemctl小结 6.5.3 timedatectl 6.5.4 localectl 6.5.5 netw ...
- Delphi 数据库连接查询分析器
为了方便自己查询数据库信息,花了小时间写了小工具,添加SQL语法高亮显示功能
- supOS蓝卓工业互联网与iNeuOS工业互联网操作系统对比
最近有一个企业正在调研工业互联网平台,其中调研的是supOS蓝卓工业互联网和iNeuOS工业互联网操作系统.让我们给出一个对比情况表,我们自己总结了一份,由于不太了解supOS,于是也问了deepse ...
- 【JVM之内存与垃圾回收篇】垃圾回收器
垃圾回收器 GC 分类与性能指标 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商.不同版本的 JVM 来实现. 由于 JDK 的版本处于高速迭代过程中,因此 Java 发展至今已经衍生了众多的 ...
- Windows IntelliJ IDEA 快捷键终极大全
自动代码 常用的有fori/sout/psvm+Tab即可生成循环.System.out.main方法等boilerplate样板代码 . 例如要输入for(User user : users)只需输 ...
- 2025年BI工具趋势:DataFocus与FineBI的技术创新对比
1. 摘要 DataFocus 和 FineBI 都是旨在帮助企业利用数据进行决策的商业智能 (BI) 产品.DataFocus 强调其下一代.基于搜索的 BI 方法,侧重于易用性和快速仪表板创建,尤 ...
- Spring 的 resolveBeforeInstantiation 方法作用详解
一.定义 resolveBeforeInstantiation 是 Spring 框架中 AbstractAutowireCapableBeanFactory 类的核心方法之一,它在 Bean 的实例 ...