第十一届中国大学生程序设计竞赛网络预选赛 魔塔

这个战斗的情况非常的不正常,如果怪物不能破防还会给你加血。

于是我们可以和怪物战斗 \(\lceil\frac{h_i}{X-d_i}\rceil\) 回合,假设现在的防御力为 \(Y\),那么收益就是:

\[\lfloor\frac{h_i}{X-d_i}\rceil\times (Y-a_i) \]

对于每一个怪物,我们即 \(c_i=\lceil\frac{h_i}{X-d_i}\rceil\),那么显然 \(-c_i\times a_i\) 是肯定会造成的,我们只需要最大化 \(Y\times c_i\) 就行了。

这个问题可以加强成为下面的问题,最大化下式:

\[\sum\limits_{i<j} a_i\times b_j \]

其中 \((a_i,b_i)\) 表示第 \(i\) 个点可以增加多少防御力,\(b_i\) 表示这个节点的回合数。

考虑如果 \(a_i\times b_j>a_j\times b_i\),那么需要满足 \(\frac{a_i}{b_i}>\frac{a_j}{b_j}\),于是我们把这个东西作为关键在,排序之后计算肯定是最优的。

显然这是一个全序问题,考虑在放到树上之后怎么做。

其实是经典贪心,类似于 https://vjudge.net/problem/HDU-6326。

感性理解,如果某个父亲如果没有其儿子优,那么我们取选择父亲肯定是为了选择儿子,于是我们直接把父亲和儿子绑定到一起,让父亲选完放上就拿儿子。

考虑通过调整法证明其正确性,我们假设存在一个父亲 \(fa\) 在没有儿子 \(x\) 优的情况下,没有马上选择 \(x\) 而是又去选择了另外一个节点 \(p\)

如果 \(p\)\(x\) 优,那么我们先选择 \(p\) 再选择 \(fa\) 一定更优。

如果 \(p\)\(fa\) 裂,那么最后选择 \(p\) 是更优的。

如果 \(p\)\(x\)\(fa\) 之间,那么其可能先于 \(fa\) 选择或者后于 \(p\),因为这至少可以造成 \(1\) 的贡献,而在中间选择什么都得不到。

我们这样操作是不会影响其他元素的,我们这些操作只会涉及 \(fa,p\) 的这个区间的选择进行交换,并不会把其他的元素交换进来。

于是就赢了,时间复杂度为 \(O(n\log n)\)

#include<iostream>
#include<queue>
#include<vector>
#include<bitset>
#define int long long
using namespace std;
const int N=1e5+5,inf=1e18;
int n,A,F[N],a[N],b[N],ans,p;
vector<int> v[N];
bitset<N> vis;
struct node{int a,b,id;friend bool operator <(const node a,const node &b){if (a.a*b.b!=a.b*b.a) return a.a*b.b<a.b*b.a;return a.a+inf*(!a.a&&!a.b)<b.b+inf*(!b.a&&!b.b);}
};
struct DSU{int fa[N];DSU(){for(int i=1;i<N;i++)fa[i]=i;}int f(int x){return fa[x]=(fa[x]==x?x:f(fa[x]));}void merge(int x,int y){fa[f(x)]=f(y);}
}dsu;
void dfs(int x,int f){F[x]=f;for(int i:v[x]) if(i!=f) dfs(i,x);
}
priority_queue<node>q;
signed main(){ios::sync_with_stdio(false);cin.tie(nullptr);cin>>n>>A;for(int i=1,x,y;i<n;i++){cin>>x>>y;v[x].push_back(y);v[y].push_back(x);}dfs(1,0);for(int i=2,op,x,d,h;i<=n;i++){cin>>op;if(op==1){a[i]=1;}else{cin>>x>>d>>h,d=A-d;int t=(h+d-1)/d-1;ans-=t*x,b[i]=t;}}for(int i=1;i<=n;i++){q.push({a[i],b[i],i});}while(!q.empty()){auto [x,y,o]=q.top();q.pop();if(!vis[o]&&x==a[o]&&y==b[o]){p=dsu.f(F[o]),vis[o]=1,dsu.merge(o,F[o]);ans+=a[p]*y,a[p]+=x,b[p]+=y;if(p>1) q.push({a[p],b[p],p});}}cout<<ans<<'\n';return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK 离线安装

检查当前系统中是否已安装JDK [root@localhost ~]# java -version openjdk version "1.8.0_242" OpenJDK Runtime Environment (build 1.8.0_242-b08) OpenJDK 64-Bit Server VM (build 25.242-b08, mixed m…

minio 离线安装

在 CentOS 系统上离线安装 MinIO 的步骤如下: https://www.minio.org.cn/download.shtml#/linux准备工作 1.1 下载 MinIO 二进制文件 MinIO 是一个单文件的二进制程序,因此可以直接下载并运行。● 在有互联网连接的机…

HbuilderX 将 h5转成uniapp的一些记录.19127294

在将h5转成uniapp的过程中, 遇到了一些问题, 这里记录一下:1.转成uniapp后,开始打包,放到手机上安装app,有些功能竟然无法启动,顿时有些茫然, 明明在电脑模拟器上运行都没有问题. 2.于是为了探明原因,安装了手机基座,可…

银行同业存单产品的筛选方法

银行同业存单产品的筛选方法我们上一篇文章讲了《银行同业存单的信用等级》,那么这篇文章就介绍一下选择一个合适的同业存单产品的理论步骤。因为考察的方面会比较多,所以,即使压缩了篇幅也还是会比较长。我们普通投…

时间轴网站设计建设摩托车官网商城踏板

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享&#xff0c;严禁他用&#xff01;&#xff01;如有侵权&#xff0c;请联系删除 目录 一、知识引入 &#xff08;一&#xff09;深度学习 &#xff08;二&#xff09;Tensorflo…

好的网站布局网络平面广告设计

对mysql 查询实战-变量方式-题目&#xff0c;进行一个解答。&#xff08;先看题&#xff0c;先做&#xff0c;再看解答&#xff09; 1、查询表中⾄少连续三次的数字 1&#xff0c;处理思路 要计算连续出现的数字&#xff0c;加个前置变量&#xff0c;记录上一个的值&#xff0c…

deepseek 私有部署文档

一、基于容器创建 进入节点后先启动容器,在容器中进行后续的操作(只需要执行一次就好,只要容器存在,下次直接进入就行) docker run -it --device=/dev/dri --device=/dev/htcd --group-add video --name openwebu…

MySQL运维及开发规范

一.基础规范 (1) 使用INNODB存储引擎 (2) 表字符集使用UTF8 (3) 所有表都需要添加注释 (4) 单表数据量建议控制在5000W以内 (5) 不在数据库中存储图、文件等大数据 (6) 禁止在线上做数据库压力测试 (7) 禁从测试、开发…

短视频平台差异视角下开源AI智能名片链动2+1模式S2B2C商城小代码的适配性研究——以抖音与快手为例

短视频平台差异视角下开源AI智能名片链动2+1模式S2B2C商城小代码的适配性研究——以抖音与快手为例pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block …

深圳服饰网站建设克拉玛依住房和建设局网站

在用虚拟环境跑深度学习代码时&#xff0c;新建的环境一般会缺少一些库&#xff0c;而一般解决的方法就是直接conda install&#xff0c;但是我在conda install visdom之后&#xff0c;安装是没有任何报错的&#xff0c;conda list里面也有visdom的信息&#xff0c;但是再运行代…

异步读写mysql依赖pymysql (asyncio/ aiomysql)

代码 `import asyncio import aiomysql settings = { "host": "127.0.0.1", "port": 3306, "user": "root", "password": "123456", "db…

dw如何在网站做弹窗手机网站建设公司推荐

处理过线上问题的同学基本上都会遇到系统突然运行缓慢&#xff0c;CPU 100%&#xff0c;以及Full GC次数过多的问题。当然&#xff0c;这些问题的最终导致的直观现象就是系统运行缓慢&#xff0c;并且有大量的报警。本文主要针对系统运行缓慢这一问题&#xff0c;提供该问题的排…

Linux发行版切换技术全解析

本文深入探讨Linux发行版切换的技术实践,涵盖虚拟机迁移、系统配置同步、文件系统操作等关键技术细节,分享从Kubuntu到OpenSUSE Tumbleweed的实际迁移经验。Ask Hackaday: How Do You Distro Hop? 如果你在Hackaday…

电子网站建设心得工业产品设计要学什么

当前位置:我的异常网 Java Web开发 调用javabean的非常郁闷的异常。调用javabean的非常郁闷的异常。www.myexceptions.net 网友分享于&#xff1a;2013-09-12 浏览&#xff1a;18次调用javabean的非常郁闷的错误。。急&#xff01;&#xff01;&#xff01;我已经做了测试 …

详细介绍:Selenium基础操作方法详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

怎么做自己的淘宝网站南阳做网站哪家好

2345王牌浏览器网页加载慢怎么办?相信很多2345王牌浏览器用户都碰到过这个问题&#xff0c;今天小编就给大家带来这个解决办法&#xff0c;让你拥有极速加载网页。 2345王牌浏览器网页加载慢解决办法 1、打开清除上网痕迹。 入口一&#xff1a;标签栏居中&#xff0c;菜单栏…

完整教程:高效Excel数据净化工具:一键清除不可见字符与格式残留

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

手把手教你用 Docker 部署 Redis

本文详细介绍从轩辕镜像拉取Redis镜像的多种方式(登录验证、免登录、官方直连等),提供快速部署、持久化部署(推荐)、docker-compose部署(企业级)三种方案,还包含结果验证方法及无法远程连接、设置密码等常见问…

悟空博弈单元(WBUC)与广域统一计算(WAUC)研究:价值共生的技术基石——声明Ai研究

悟空博弈单元(WBUC)与广域统一计算(WAUC)研究:价值共生的技术基石 一、研究背景与概述 人工智能技术的发展正经历从单纯的"知识存储"向"知行合一"的深刻范式转变 。在这一转型过程中,传统计算架…

如何快速推广自己的网站旧房装修找哪家

微信爱情指数计算器整蛊app是一款不错的爱情必备的计算器服务&#xff0c;让情侣们有一个很有意思的整蛊服务的App&#xff0c;喜欢的话快来下载吧。微信爱情指数计算器整蛊app介绍1、爱情指数计算器整蛊app是很有意思的一款爱情指数计算器软件2、操作起来也比较的简单&#xf…