首页 > TAG信息列表 > Hnoi2016

P3250 [HNOI2016] 网络 (树剖+堆)

本题有插入路径和删除路径,在每个节点维护插入堆和删除堆,查询时两者top一样则一直弹出。如果每个节点维护的是经过他的路径,显然有些不好处理,正难则反,每个点维护不经过他的路径,那么x节点出了故障时,我们就查询x,查询到的就是x出故障后不受影响的路径。 (洛谷上有一个点一直过不了,似乎是

luogu P3245 [HNOI2016]大数

题面传送门 我们考虑设\(Sum_i\)表示\([1,i]\)组成的数。 然后就是让求\(Sum_r-Sum_l\times 10^{r-l}=0\) 移项得到\(Sum_r=Sum_l\times 10^{r-l}\) 两边同乘\(10^l\)得到\(Sum_r\times 10^l=Sum_l\times 10^r\) 然后移项得到\(\frac{Sum_r}{10^r}=\frac{Sum_l}{10^l}\) 这个东西

[ HNOI2016 ] 最小公倍数

题目 Luogu LOJ Acinwg 思路 代码 #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <cmath> using namespace std; const int N = 100010, M = 50010; int n, m, q, L[N], R[N], ans[N]; struct EDGE { in

dtoi4544「HNOI2016」网络

题意:      给定一棵树,每次有 $3$ 种操作 添加一条从 $u$ 到 $v$ 的重要度为 $d$ 的路径 删除一条以前添加的路径 询问当前时刻不经过点 $x$ 的路径中,重要度最大的路径的重要度 题解:      考虑对于一个添加或删除操作,可以树链剖分之后在经过的路径上打上重要度的标记,然后

【BZOJ4539】[HNOI2016] 树(线段树合并+倍增LCA)

点此看题面 大致题意: 给定一棵模板树,要求建立一棵大树,初始与模板树一样。每次操作将模板树中以\(x\)为根的子树复制为大树中\(y\)的子节点,将其重新编号并保持相对大小顺序不变。每次询问求两点间的距离。 建树 首先我们考虑如何建出这棵大树,由于最多有\(10^{10}\)个点,显然不可能暴

[HNOI2016]序列

题目   点这里看题目。 分析   考虑将所有子序列画成\(n\times n\)的表的形式,表中的元素\((x,y)\)就表示子序列\(a[x:y]\)的最小值。(\(x>y\)则\((x,y)=0\))   那么,对于一个元素\(a_i\),记它左边第一个小于它的位置为\(lef(i)\),右边第一个小于等于它的位置为\(rig(i)\)。那么,在

题解 LOJ2049 「HNOI2016」网络

题目链接 简要题意:给定一棵树。让你支持三种操作: 加入一条路径\((u,v)\)。路径有一个权值\(w\)。 删除之前某一时刻加入的路径。 对树上某个节点\(u\)询问:问当前所有不经过\(u\)的路径的权值的最大值。 可以发现,本题的难点在于最大值,它不像类似于“求权值和”这样的问题,它不支持

「HNOI2016」序列

传送门 Description 有 \(q\) 个询问,每个询问给定两个数\(l\) 和\(r\),求 \(a[l:r]\) 的不同子序列的最小值之和 Solution  校内模拟赛用了这道题,但是莫队只能拿\(80\)分,正解是猫树 当然还是莫队啦 考虑一个数加入时的贡献,就是以它为端点的区间的贡献 发现可以将现有的区间

「HNOI2016」矿区

https://loj.ac/problem/2052 题解 平面图转对偶图。。 首先我们转的话需要给所有的平面标号,然后找到每条边看看他们隔开了哪两个平面。 做法就是对每个点维护它的所有排好序的出边,然后对于每一条有序边找到它的一条后继边。 如果一直找下去,就会找到一个平面,依次标号就好了。 我们

[HNOI2016]矿区

题面 给定平面上许多的区域,每次询问一些点所包围的子区域的面积平方之和与总面积之和之比,强制在线。 \(\text{Solution}\) 毒瘤至极 显然我们要维护每一个小区域的面积,由于我们要维护的是一个面,所以我们将平面图转对偶图(不会的戳这里)。面的信息就缩在一个点中,以无穷域为根随便弄

[HNOI2016]序列

题面 给你一个数列,很多组询问,每次询问 \(l\) 到 \(r\) 的子区间的区间最小值之和。 \(\text{Solution:}\) 这种没有修改的,与子区间有关的题,不禁让我想起了影魔显然要离线做。 先用单调栈预处理出每个点往左往右第一个比它小的位置 \(L[i],R[i]\)。 记 \(f[i]\) 为以 \(i\) 结尾的区

[luogu3246][bzoj4540][HNOI2016]序列【莫队+单调栈】

题目描述 给定长度为n的序列:a1,a2,...,an,记为a[1:n]。类似地,a[l:r](1<=l<=r<=N)是指序列:al,al+1,...,ar-1,ar。若1<=l<=s<=t<=r<=n,则称a[s:t]是a[l:r]的子序列。现在有q个询问,每个询问给定两个数l和r,1<=l<=r<=n,求a[l:r]的子序列的最小值之和。例如,给定序列5,2,4,1,3,询问给定的两个数

4539: [Hnoi2016]树

4539: [Hnoi2016]树 链接 分析: 代码: #include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<cmath>#include<cctype>#include<set>#include<queue>#include<vector>#include<map>#define

「HNOI2016」树 解题报告

「HNOI2016」树 事毒瘤题... 我一开始以为每次把大树的子树再接给大树,然后死活不知道咋做,心想怕不是个神仙题哦 然后看题解后才发现是把模板树的子树给大树,虽然思维上难度没啥了,但是还是很难写的。 大值思路是对每个子树维护成一个大节点,存一些根啊,深度啊,到大节点根距离啊,节点编号

【HNOI2016】大数

【HNOI2016】大数 题目链接 题目描述 小 B 有一个很大的数 $ S $,长度达到了 $ N $ 位;这个数可以看成是一个串,它可能有前导 $ 0 $,例如 00009312345 。小 B 还有一个素数 $ P $。 现在,小 B 提出了 $ M $ 个询问,每个询问求 $ S $ 的一个子串中有多少子串是 $ P $ 的倍数($ 0 $ 也是 $ P

[HNOI2016]网络 树链剖分,堆

[HNOI2016]网络 LG传送门 表示乱搞比正解难想。 整体二分很好想吧。 但是为了好写快乐,我们选择三个\(\log\)的乱搞。 先树剖,线段树套堆维护区间最大值。对于一次修改,如果是插入,就把树上除了这条链的地方加上这个重要度,如果是删除则反之。注意线段树可以标记永久化,这里用的堆是一种(

洛谷P3246 [HNOI2016]序列(离线 差分 树状数组)

题意 题目链接 Sol 好像搞出了一个和题解不一样的做法(然而我考场上没写出来还是爆零0) 一个很显然的思路是考虑每个最小值的贡献。 预处理出每个数左边第一个比他小的数,右边第一个比他大的数。 那么\([L_i + 1, i]\)对\([i, R_i]\)中的每个数都会有\(a[i]\)的贡献。 我们可以抽象

【LG3250】[HNOI2016]网络

【LG3250】[HNOI2016]网络 题面 洛谷 题解 \(30pts\) 对于\(m\leq 2000\),直接判断一下这个个点是否断掉一个交互,没断掉的里面取\(max\)即可,复杂度\(O(m^2\log n)\)。 另\(20pts\) 对于无删除操作的,用线段树维护, 我们将一条路径的补集全部打上那条路径重要度的标记,这样我们断一条边

【LG3247】[HNOI2016]最小公倍数

【LG3247】[HNOI2016]最小公倍数 题面 洛谷 题解 \(50pts\) 因为拼凑起来的部分分比较多,所以就放一起了。 以下设询问的\(a,b\)为\(A,B\), 复杂度\(O(nm)\)的:将所有\(a\leq A,b\leq B\)的边两端,用并查集并起来,再看一看等于\(A,B\)的是否有端点在集合中即可。 一条链的:拿线段树之类的

【HNOI2016】矿区

题面 题解 知识引入 1. 平面图 一个图\(G=(V,E)\),若能将其画在平面上,且任意两条边的交点只能是\(G\)的顶点,则称\(G\)可嵌入平面,或称\(G\)是可平面的。 可平面图在平面上的一个嵌入称为一个平面图。如下图左边黑色的图为平面图,右边红色的图不属于平面图: 2. 平面图的对偶图 设有平面

BZOJ4541[HNOI2016]矿区(对偶图)

题目链接 洛谷 BZOJ 前置知识 平面图转对偶图 简单理解“对偶图”就是,原图边把平面切成了很多块,对偶图中的点代表这些块(最外面的无穷域也可以算作一个块),相邻的块(即有公共边)之间连边,如下图(左边原图,右边对偶图): 不难发现原图中的每条边都对应了新图中的一条边 那么如何将一个平面图转

HNOI2016做题笔记

刚刚把HNOI大集合删了因为加题实在太不方便 HNOI2016 D1T1 最小公倍数 (分块、并查集) 看到这种不能用数据结构(实际上是可以用K-D Tree的)维护的题目就应该想到分块然后使用并查集维护连通性和一个连通块中的\(maxa , maxb\)啊QAQ 为了区分询问的\(ab\)与边权的\(ab\),询问的\(ab\)描述

洛谷P3248 [HNOI2016]树(主席树 倍增 )

题意 题目链接 Sol 从上午九点淦到现在qwq 思路比较简单,就是把每次加入的一坨点看成一个,然后直接倍增搞。。 然后慢慢调就可以了。。。 最后数量级会到达\(10^{10}\),所以应该开long long #include<bits/stdc++.h> #define Pair pair<LL, LL> #define MP make_pair #define fi first