首页 > 其他分享 >[ZJOI2008] 瞭望塔

[ZJOI2008] 瞭望塔

时间:2024-08-02 13:28:34浏览次数:10  
标签:直线 队首 斜率 ZJOI2008 斜坡 平面 瞭望

从题目给的图片可以得到一个提示,我们将某一个斜坡(不妨假设斜率为正)变成一条直线,那么如果我们瞭望塔建在了这条斜坡的右边,则瞭望塔的顶端一定要在这条直线的上方,否则的话就看不到这个斜坡。进一步地,假设我们已经确定了瞭望塔的位置,那么:在其左边的斜率为负的斜坡都能被看到,斜率为正的斜坡能被看见当且仅当其延长的直线在瞭望塔顶端的下边;在其右边的斜率为正的斜坡都能被看到,斜率为负的斜坡能被看见当且仅当其延长的直线在瞭望塔顶端的下边

于是不难发现这是一个半平面交的问题,我们求出所有斜坡延长的直线的半平面交,那么答案候选点肯定子啊半平面交的边界上。进一步地可以知道,答案候选点一定在半平面交的拐点或者是过某个村庄山峰顶点作垂直于\(x\)轴的直线与半平面交边界的交点(因为如果都不是,那么我们将点向左边移动或者向右边移动,答案不会变得更差甚至可能会更好)

于是就变成模板题了

但是说一下我们的板子的问题:为什么最后需要让队首再去更新一遍队列?实际上这一个问题在OI-wiki中有阐述,可以看一下。但是这道题目的半平面交的所有边界的斜率,是从\(-\frac{π}{2}\)逐渐递增到\(\frac{π}{2}\)的,肯定不会出现OI-wiki所说的问题,于是就不用让队首再去更新一遍队列。如果更新了会发生什么问题?你会发现样例二(Acwing有两个样例)过不了,原因就在于on_right函数,我们是小于等于判断的,这样会导致样例二全部都弹出去,我们要么将小于等于改成小于,要么不让队首再去更新一遍队列。这个改动是由于图形的特殊性质导致的。但是有些时候角度就是会设计\([-π,π]\)的所有角度怎么办?以OI-wiki的讨论为例,他画的那个图,我们加入一个外边界就好了,如下图:

标签:直线,队首,斜率,ZJOI2008,斜坡,平面,瞭望
From: https://www.cnblogs.com/dingxingdi/p/18338536

相关文章

  • TBK-RD8T3x 开发板 未来的发展瞭望
    TBK-RD8T3x开发板是一款基于增强型的高速1T8051内核的工业级集成触控按键功能的Flash微控制器。它支持多种通信接口,如GPIO、I2C、SPI等。未来,TBK-RD8T3x开发板有望在以下方面得到进一步的发展:更强大的处理能力:随着技术的不断进步,TBK-RD8T3x开发板的处理器性能将得到进一步提升,以满......
  • P2607 [ZJOI2008] 骑士
    P2607[ZJOI2008]骑士[P2607ZJOI2008]骑士-洛谷|计算机科学教育新生态(luogu.com.cn)目录P2607[ZJOI2008]骑士题目大意思路code题目大意给你一个\(n\)个点,\(n\)条边的基环树森林。你可以从中选择若干个点,满足两两之间不存在边相连。每个点有一个权值,请问最大的......
  • 【题解】Luogu[P2607] [ZJOI2008] 骑士
    题目说给定\(n\)个点\(n\)个关系,也就是\(n\)条边,显然是基环树,又因为没有规定一定连通,于是我们可以将题目简化为给定一个基环树森林,点有点权,相邻的两个点不能同时选,问最大点权和。part1我们先考虑如果没有环,只是树,该怎么做。这一部分很简单,令\(f_{i,0/1}\)表示以\(i\)......
  • NC20477 [ZJOI2008]树的统计COUNT
    题目链接题目题目描述一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作:I.CHANGEut:把结点u的权值改为tII.QMAXuv:询问从点u到点v的路径上的节点的最大权值III.QSUMuv:询问从点u到点v的路径上的节点......
  • ZJOI2008 树的统计
    这是一道比树链剖分板子还板子的题目。操作:我们将以下面的形式来要求你对这棵树完成一些操作:CHANGEut:把节点\(u\)权值改为\(t\);QMAXuv:询问点\(u\)到点\(v\)路径上的节点的最大权值;QSUMuv:询问点\(u\)到点\(v\)路径上的节点的权值和。注意:从点\(u\)......
  • BZOJ 1036 [ZJOI2008] 树的统计Count (树链剖分)
    题目地址:BZOJ1036树链剖分裸题,需要用线段树同时维护最大值与和值两个信息,只是代码量大一点而已。。代码如下:#include<iostream>#include<string.h>#include<math.h>#include<queue>#include<algorithm>#include<stdlib.h>#include<map>#include<set&g......
  • P2590 [ZJOI2008]树的统计
    一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值W。我们将以下面的形式来要求你对这棵树完成一些操作:I.CHANGEut:把结点u的权值改为t。II.QMAXuv:......
  • P2607 [ZJOI2008] 骑士
    和<没有上司的舞会>一样,但树上多了条边  断掉环上一条边,两个点分别做dp,取max #include<iostream>#include<algorithm>usingnamespacestd;constintN=1e......
  • ZJOI2008, 树的统计 树链剖分模板
    //题意:给定一棵树,现在我需要询问以下操作//1.q,u之间的最小值//2.q,u之间的简单路径的权值和//3.修改树上q点的权值//思路:如果是在一段序列上的问......
  • 题解 LGP2607【[ZJOI2008] 骑士】
    problem基环树森林带权最大独立集。\(n\leq10^6\)。solution0这里先解释一下基环树森林,它就是一个\(n\)个点\(n\)条边的森林,同时是一个荒漠。我们拿出其中一棵连......