JLOI2015/BZOJ4003 城池攻占

足球赛事数据分析:从特征工程到模型评估的完整算法流程 在数据驱动的体育分析中,机器学习算法已成为从海量赛事数据中提取洞察的关键工具。不同于简单的比分猜测,一套完整的算法流程始于特征工程——将球队排名、近期状态、主客场表现等原始信息转化为结构化数值特征,再通过逻辑回归、随机森林等分类模型学习历史规律,输出统计概率。模型评估环节中,混淆矩阵与F1分数帮助分析者平衡准确率与召回率,避免陷入准确率陷阱。这类技术框架已广泛应用于足球赛事数据分析、球队能力评估以及比赛走势预判等场景。本文以赛事数据为例,从数据清洗、特征构造到模型训练与评估,系统拆解一条可落地的机器学习工程 阅读详情

Description

  小铭铭最近获得了一副新的桌游,游戏中需要用m个骑士攻占n个城池。
  这n个城池用1到n的整数表示。除1号城池外,城池i会受到另一座城池fi的管辖,其中fi  每个城池有一个防御值hi,如果一个骑士的战斗力大于等于城池的生命值,那么骑士就可以占领这座城池;否则占领失败,骑士将在这座城池牺牲。占领一个城池以后,骑士的战斗力将发生变化,然后继续攻击管辖这座城池的城池,直到占领1号城池,或牺牲为止。
  除1号城池外,每个城池i会给出一个战斗力变化参数ai,vi。若ai=0,攻占城池i以后骑士战斗力会增加vi;若ai=1,攻占城池i以后,战斗力会乘以vi。
  注意每个骑士是单独计算的。也就是说一个骑士攻击一座城池,不管结果如何,均不会影响其他骑士攻击这座城池的结果。
  现在的问题是,对于每个城池,输出有多少个骑士在这里牺牲;对于每个骑士,输出他攻占的城池数量。

Input

  第1行包含两个正整数n,m,表示城池的数量和骑士的数量。
  第2行包含n个整数,其中第i个数为hi,表示城池i的防御值。
  第3到n+1行,每行包含三个整数。其中第i+1行的三个数为fi,ai,vi,分别表示管辖这座城池的城池编号和两个战斗力变化参数。
  第n+2到n+m+1行,每行包含两个整数。其中第n+i行的两个数为si,ci,分别表示初始战斗力和第一个攻击的城池。

Output

  输出n+m行,每行包含一个非负整数。其中前n行分别表示在城池1到n牺牲的骑士数量,后m行分别表示骑士1到m攻占的城池数量。

Sample Input

5 5 50 20 10 10 30 1 1 2 2 0 5 2 0 -10 1 0 10 20 2 10 3 40 4 20 4 35 5

Sample Output

2 2 0 0 0 1 1 3 1 1

Hint

【数据范围】
  对于20%的数据,0 < n,m <= 3000;
  对于20%的数据,保证对于所有的城池i,fi=i-1。
  对于20%的数据,保证对于所有的城池i,ai=0,vi=0。
  以上三类数据两两没有交集。
  对于100%的数据,1<=n,m<=300000,1<=fi;当ai=1时,vi>0;保证任何时候骑士战斗力值的绝对值不超过10^18。

网上全是可并堆写法,虽然我才写可并堆没多久,但是已经忘完了,而且感觉有点不好搞(网上的标好像很长)。于是我们来倍增操作一下。

f[i][j]表示从i开始攻略2^j个城池需要的最小攻击力,辅助数组g[i][j]维护两个标记sum和mul(类似于行星序列那道题的标记)。所以我们有f[i][j]=max(f[i][j-1],(f[fa[i][j-1][j-1]-sum)/mul)。

#include<bits/stdc++.h>
using namespace std;
const int Maxn=300005;
#define ll long long
vector<int>G[Maxn];
int N[Maxn],M[Maxn];
int n,m,p[25][Maxn];
ll a[Maxn],v[Maxn],mn[25][Maxn];
struct info{
	ll tag,mul;
	info(ll _tag=0,ll _mul=1){tag=_tag,mul=_mul;}
	info operator*(const info&rhs){return info(tag*rhs.mul+rhs.tag,mul*rhs.mul);}
}g[25][Maxn];
void dfs(int x){
	int maxlog=log2(n);
	g[0][x]=info(a[x]?0ll:v[x],a[x]?v[x]:1ll);
	for(int j=1;j<=maxlog;++j)if(~p[j-1][x]){
		p[j][x]=p[j-1][p[j-1][x]];
		g[j][x]=g[j-1][x]*g[j-1][p[j-1][x]];
		mn[j][x]=max(mn[j-1][x],(ll)ceil((mn[j-1][p[j-1][x]]-g[j-1][x].tag)/(1.0*g[j-1][x].mul)));
	}
	for(int i=0;i<G[x].size();++i)
		if(G[x][i]^p[0][x])dfs(G[x][i]);
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i){
		scanf("%lld",&mn[0][i]);
	}
	memset(p,-1,sizeof(p));
	for(int i=2;i<=n;++i){
		scanf("%d%lld%lld",&p[0][i],&a[i],&v[i]);
		G[p[0][i]].push_back(i);
	}
	dfs(1);
	int maxlog=log2(n);
	for(int i=1;i<=m;++i){
		ll v;int x,ret=0;scanf("%lld%d",&v,&x);
		for(int j=maxlog;j>=0;--j)if(~p[j][x]&&v>=mn[j][x]){
			v=v*g[j][x].mul+g[j][x].tag;
			M[i]+=(1<<j);
			x=p[j][x];
		}
		if(~x&&v>=mn[0][x])++M[i];
		if(~x&&v<mn[0][x])++N[x];
	}
	for(int i=1;i<=n;++i)
		cout<<N[i]<<'\n';
	for(int i=1;i<=m;++i)
		cout<<M[i]<<'\n';
	return 0;
}

 

PEMFC电化学入门:从电流密度到Tafel公式的实战计算指南 本文详细介绍了PEMFC电化学的基础知识,从电流密度计算到Tafel公式的应用,提供了实战计算指南。通过代码示例和常见问题排查,帮助工程师快速掌握燃料电池性能优化的关键参数,如交换电流密度和活化损失计算,适用于汽车动力和分布式发电等领域。 阅读详情

相关推荐

Opencv4.5.1 微信二维码识别功能 QRCode 编译与使用 C++

部分参考:https://mp.weixin.qq.com/s/2GZAJAUPHTXFOKDRv-D21Q 一、下载源码 https://github.com/opencv 二、源码编译 ① 在cmake中添加源码编译路径和生成路径,第一次点击configure。 ② 添加contrib路径 第一次configure后,找到OPENCV_EXTRA_MODULES_PATH,将contrib路径添加进来,注意要具体到modules/,继续configure。 ..

zaibeijixing的专栏 1万+

BZOJ 4003 / Luogu P3261 [JLOI2015]城池攻占 (左偏树)

左偏树裸题,在树上合并儿子传上来的堆,然后小于当前结点防御值的就pop掉,pop的时候统计答案. 修改的话就像平衡树一样打懒标记就行了. 具体见代码 CODE #include<bits/stdc++.h> using namespace std; char cb[1<<15],*cs=cb,*ct=cb; #define getc() (cs==ct&&(...

Ark 227

KiCad自动布线实战:FreeRouting插件安装与使用指南

在PCB设计流程中,布线环节往往占据大量重复性工作,尤其对于中小型双面板,成百上千条飞线的手动连接既繁琐又易出错。自动布线技术通过算法在给定设计规则和元件布局的基础上自动规划走线路径,能显著提升布线效率。FreeRouting作为一款开源自动布线器,与KiCad通过DSN/SES标准中间格式无缝配合,让工程师将精力集中于关键信号和布局优化,而将常规网络交给工具处理。本文从自动布线的原理与边界出发,讲解了FreeRouting的安装、DSN导出、参数设置、自动布线及结果回传的完整流程,并结合实际案例展示了在S

weixin_32025789的博客 277

【BZOJ4003】[JLOI2015]城池攻占 可并堆

【BZOJ4003】[JLOI2015]城池攻占 Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。 这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi <i。也就是说,所有城池构成了一棵有根树。这 m 个骑士用 1 到 m 的整数表示,其 中第 i 个骑士的...

aodanchui1057的博客 172

华为iTrustee实战:5分钟搞定TrustZone环境搭建(附BoostKit配置技巧)

本文提供了一份华为iTrustee与ARM TrustZone环境的5分钟快速搭建实战指南。详细介绍了在TaiShan服务器上利用鲲鹏BoostKit套件部署可信执行环境(TEE)的完整流程,包括环境检查、驱动安装、首个可信应用(TA)的编译与运行,并分享了关键的BoostKit配置技巧与深度排错方法,助力开发者快速为业务注入硬件级安全能力。

yoga7的博客 966

什么是 SAPGUI 里的 Logon Group/Server

这意味着,不同的用户连接可以被分配到不同的应用服务器,以实现均衡的资源利用和降低某一服务器的负载压力。在这种配置下,欧洲的用户登录时选择“EUROPE_GROUP”,系统将自动选择一个位于欧洲的数据中心的服务器进行连接,这样不仅减少了网络延迟,还实现了服务器间的负载均衡。用户在 SAPGUI 中登录时,只需选择相应的 Logon Group(例如“FIN_GROUP”),系统就会自动将他们的连接请求分配到当前负载最小的应用服务器上,这种动态分配大大提升了系统的响应速度和稳定性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1069

bzoj4003[JLOI2015]城池攻占

bzoj4003[JLOI2015]城池攻占 题意: 有n个城池组成根节点为1的树,m个人,当一个人的战斗力大于等于攻打城市的防御力,就能攻占这个城市,来到这个城市的父节点,否则该人会牺牲在这个城市。当一个城市被攻占时,会使攻占的人的战斗力加或乘上某个数。现在给出m个人的最开始攻打的城市和初始战斗力,求在每个城市的牺牲人数和每个人一共攻打几个城市。注意这m个人处在不同的时空,即攻击互...

anheku1562的博客 140

Open3D点云数据处理(二):读写点云,你真的会吗?

本文详细介绍了open3d加载点云、保存点云的方法,同时打印点云坐标、颜色、法向量等字段信息。

孙悟空 2604

BZOJ_4003_[JLOI2015]城池攻占_可并堆

BZOJ_4003_[JLOI2015]城池攻占_可并堆 Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。 这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi <i。也就是说,所有城池构成了一棵有根树。这 m 个骑士用 1 到 m 的整数表示,其 中第 i ...

97

Python爬虫-爬取汽车之家各品牌周销量榜数据,进行数据分析

本文是该专栏的第57篇,后面会持续分享python爬虫干货知识。本文中,笔者已经整理20篇汽车平台相关的爬虫项目案例。对此感兴趣的同学,可以直接翻阅查看。同样,笔者在本文中将继续以汽车之家平台为例子。基于Python爬虫,实现批量爬取“各品牌周销量榜单”的数据。废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 365

RT-DETR 跨模态检测改进:融合红外数据提升 R50 夜间检测效果

本文提出跨模态自适应融合RT-DETR(CMF-RTDETR-R50),通过双分支骨干网络、可变形模态对齐和门控注意力融合三大模块,将红外数据融入RT-DETR-R50检测器,显著提升夜间目标检测性能。该方法在夜间场景下mAP@0.5提升11.7%,小目标检测AP_S提升15.3%,同时保持实时性(38 FPS)。关键技术包括:1)独立提取可见光与红外特征;2)可变形卷积解决模态对齐问题;3)动态门控机制自适应融合双模态特征。该方案适用于安防监控、自动驾驶等夜间检测场景,为跨模态实时检测提供实用解决方案。

走向CTO的路上... 1446

【bzoj4003】【JLOI2015】【城池攻占】【可并堆】

Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。 这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi 中第 i 个骑士的初始战斗力为 si,第一个攻击的城池为 ci。 每个城池有一个防御值 hi,如果一个骑士的战斗力大于等于城池的生命值,那么骑士就可 以占领这座城池;否

sunshinezff的专栏 1544

Qt插件之Qt Designer插件实现

相比于通过控件提升来使用自定义控件,在Qt Designer中直接使用自定义控件更加方便和直观。这里就介绍一下如编写和注册Qt Designer插件。Qt Designer插件本质上来说就是一个动态库,和普通的动态库的区别是插件中导出了Qt Designer能识别的接口。...

yang1fei2的博客 3100

[BZOJ]4003: [JLOI2015]城池攻占

题解:可并堆 类似线段树维护两个标记(乘法系数和加法系数) 然后从低到上逐渐弹出元素并维护可并堆的同时维护答案 注意元素弹完的情况 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <vector> ...

weixin_30699235的博客 94

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

BZOJ 4003 [JLOI2015]城池攻占

题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4003 思路 左偏树,每个点建立一个小根堆,每次合并子树的骑士,把能攻占到某个节点的骑士中攻击力小于城池生命的pop掉,最后像线段树/splay一样给root打加/乘标记,注意合理使用long long。 代码 ...

dilei7762的博客 211

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【BZOJ4003】【JLOI2015】城池攻占

Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖,其中 fi <i。也就是说,所有城池构成了一棵有根树。这 m 个骑士用 1 到 m 的整数表示,其中第 i 个骑士的初始战斗力为 si,第一个攻击的城池为 ci。 每个城池有一个防御值...

dizhongchen2809的博客 129

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

BZOJ4003: [JLOI2015]城池攻占

Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。 这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi <i。也就是说,所有城池构成了一棵有根树。这 m 个骑士用 1 到 m 的整数表示,其 中第 i 个骑士的初始战斗力为 si,第一个攻击的城池为 ci。 每...

226

BZOJ-4003 [JLOI2015]城池攻占

文章目录题面题解 题面 传送门 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。 这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi <i。也就是说,所有城池构成了一棵有根树。这 m 个骑士用 1 到 m 的整数表示,其 中第 i 个骑士的初始战斗力为 si,第一个攻击的城池为 ci。 每个城池有一个防御值 hi,如果一个骑士的战斗力大于等于城池的生命值,那么骑士就可 以占领这座城池;否则占领失败,骑士将在这座城池

东君不爱惜 251

BZOJ4003[JLOI2015]城池攻占——可并堆

题目描述 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。 这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi <i。也就是说,所有城池构成了一棵有根树。这 m 个骑士用 1 到 m 的整数表示,其 中第 i 个骑士的初始战斗力为 si,第一个攻击的城池为 ci。 每个城池有一个防御值 hi...

weixin_33712987的博客 121

Luogu 3261 [JLOI2015]城池攻占

BZOJ 4003 需要实现一个可并堆。 每个点维护一个小根堆,然后一开始把所有骑士加入到它所在的点的小根堆当中,实际上空间是$O(m)$的,然后我们从上到下不断合并这个小根堆,合并完之后如果遇到堆顶小于当前城市的防御值就弹掉堆顶顺便记录答案。 对于那些攻占掉城池对骑士的贡献的处理,可以采用打标记的方式实现,在合并的时候$down$一下就好了。注意$down$要写在$merge$函...

dashu497731727的博客 142

BZOJ4003[JLOI2015]城池攻占(可并堆+懒惰标记)

题面:思路:直接考虑每个骑士不方便,就考虑每座城池会被哪些骑士攻占。如果一个骑士到不了儿子节点,那他肯定到不了父亲节点,所以可以对每座城池建一个小根堆,维护能攻占这座城池的骑士,递归处理子树,然后把子树的堆合并进来,当堆顶骑士攻击力小于城池生命值时弹出,同时该城池的答案++。对每个骑士,可以在上述过程中记录他弹出的位置,攻占的城池数就是dep[st]-dep[ed],为方便统计,根节点深度记为1。...

weixin_30780649的博客 93

bzoj 4003: [JLOI2015]城池攻占

Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。 这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi Input 第 1 行包含两个正整数 n;m,表示城池的数量和骑士的数量。 第 2 行包含 n 个整数,其中第 i 个数为 hi,表示城池 i 的防御值。 第 3 到 n...

ypxrain的博客 311

[BZOJ4003][JLOI2015]城池攻占

BZOJ Luogu sol 补一篇左偏树的题解 骑士对于树上结点挂链,每次合并所有子树上的骑士后把所有攻击力小于城池防御值的骑士弹掉。 左偏树维护加乘懒标记 记得要pushdown delete的时候也要记得pushdown! code #include<cstdio> #include<cstring> #include<algorithm> us...

abcyan1235的博客 84

【BZOJ4003】【JLOI2015】城池攻占 可并堆

题解: 傻题随便上数据结构都能搞过。 可并堆或者启发式合并splay都可以。 考试时状态太差一个裸模板启发式合并splay调了3h最后还爆零了Qwq、 200行!!!!!! 然后可并堆又快又短,细节又少(然后特么也全都是模板内容,一点非模板代码都没有……),完虐启发式合并。 另外这道题可以用 f(i,j)f(i,j) 表示 从点 ii 到其第 2j2^j 个父亲需要的最小战斗力,这种做

辗转山河弋流歌 3015

【BZOJ4003】【LOJ2107】【JLOI2015】城池攻占(可并堆)

Description https://loj.ac/problem/2107 Solution 由于不会乘上负数,所以到达同一座城池的骑士相对战斗力不会变化。 所以我们用堆来维护一座城池中骑士的战斗力排名,将牺牲的骑士弹出、不断向上合并即可。 long long坑死人啊。。。 Code /************************************** *...

დ♂Hany01's Blog Space♂ღ 284
上一篇: JZOJ5055 树上路径
下一篇: BZOJ 2716/2648 SJY摆棋子
DancingZ
博客等级 码龄9年 10粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值