尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

第十一届中国大学生程序设计竞赛网络预选赛 魔塔
📅 发布时间:2026/6/17 20:54:40

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

于是我们可以和怪物战斗 \(\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;
}

相关新闻

  • 短视频平台差异视角下开源AI智能名片链动2+1模式S2B2C商城小代码的适配性研究——以抖音与快手为例
  • 深入解析:DeepSeek 赋能智能零售,解锁动态定价新范式
  • 实用指南:pyecharts 画一下股票的月K图(输出html)

最新新闻

  • Kubuntu 26系统安装RTX 5070显卡驱动完整指南与避坑要点
  • 上海人卖金必避坑!别再被高价回收套路白白亏钱了 - 衡金阁
  • prime numbers
  • 2026 长沙手表回收最新行情,逸程更新热门品牌实时回收报价 - 逸程
  • G11Z工业胶粘剂产品特性与正规代理筛选指南 - 资讯速览
  • 合肥本地中职中专升本率最突出的五大名校2026秋季招生名单一览 - 小途xt

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号