博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2563 阿狸和桃子的游戏
阅读量:5134 次
发布时间:2019-06-13

本文共 840 字,大约阅读时间需要 2 分钟。

最小生成树的变形——将边权赋予到点权(当然还有一种是将点权赋到边权)

显然将边权分一半给旁边的点,然后最小生成树就可以了。
因为如果两个人分别把这个边两边的点选走了,他们相当于谁都没有拿到这个边的边权。但是如果一个人拿到了两个点,就相当于拿到了这条边的边权。
直接贪心即可》》》
不过需要注意的是将边权除以二的时候可能会出现小数,所以我们预先把它乘上二,最后输出答案的时候再除掉就可以了。

代码如下:

#include
#include
#include
#include
#include
#define MAXN 100010using namespace std;int n,m;int v[MAXN];long long ans;int main(){ #ifndef ONLINE_JUDGE freopen("ce.in","r",stdin); #endif scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&v[i]),v[i]<<=1; for(int i=1;i<=m;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); v[a]+=c,v[b]+=c; } sort(&v[1],&v[n+1]); for(int i=1;i<=n;i+=2) ans+=v[n-i+1]-v[n-i]; printf("%lld\n",ans/2);}

转载于:https://www.cnblogs.com/fengxunling/p/10262344.html

你可能感兴趣的文章
c风格字符串函数
查看>>
python基础学习第二天
查看>>
java可重入锁reentrantlock
查看>>
浅谈卷积神经网络及matlab实现
查看>>
struts2学习(9)struts标签2(界面标签、其他标签)
查看>>
Android 导入jar包 so模块--导入放置的目录
查看>>
解决ajax请求cors跨域问题
查看>>
Android Studio
查看>>
zz 圣诞丨太阁所有的免费算法视频资料整理
查看>>
【大数模板】C++大数类 大数模板
查看>>
【123】
查看>>
《收获,不止Oracle》pdf
查看>>
用户权限设置
查看>>
java 之equals与"=="的区别
查看>>
LinkedList<E>源码分析
查看>>
学习微软 Excel 2002 VBA 编程和XML,ASP技术
查看>>
游戏开发常用算法
查看>>
Real-Time Rendering 笔记
查看>>
如何理解HTML结构的语义化
查看>>
Intellij IDEA(eclipse设置)常用快捷键
查看>>