【LOJ】#2510. 「AHOI / HNOI2018」道路】的更多相关文章

#2510. 「AHOI / HNOI2018」道路 题目描述 W 国的交通呈一棵树的形状.W 国一共有 n−1 个城市和 nnn 个乡村,其中城市从 111 到 n−1 编号,乡村从 111 到 nnn 编号,且 111 号城市是首都.道路都是单向的,本题中我们只考虑从乡村通往首都的道路网络.对于每一个城市,恰有一条公路和一条铁路通向这座城市.对于城市 iii,通向该城市的道路(公路或铁路)的起点,要么是一个乡村,要么是一个编号比 iii 大的城市.没有道路通向任何乡村.除了首都以外,从任何城…
题目链接 https://loj.ac/problem/2510 思路 f[i][a][b]表示到i时,公路个数a,铁路个数b 记忆化 复杂度=状态数=\(nlog^2n\) 代码 #include <bits/stdc++.h> #define ll long long using namespace std; const int N=1e5+7; int read() { int x=0,f=1;char s=getchar(); for(;s>'9'||s<'0';s=get…
题解 读题是做题关键 我们设\(dp[u][l][r]\)表示\(u\)节点上方没改\(l\)条公路和\(r\)条铁路 然后记忆化搜索,枚举这条点改左边还是右边 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define enter putchar('\n') #de…
Loj #2495. 「AHOI / HNOI2018」转盘 题目描述 一次小 G 和小 H 原本准备去聚餐,但由于太麻烦了于是题面简化如下: 一个转盘上有摆成一圈的 \(n\) 个物品(编号 \(1\) 至 \(n\))其中第 \(i\) 个物品会在 \(T_i\) 时刻出现. 在 \(0\) 时刻时,小 G 可以任选 \(n\) 个物品中的一个,我们将其编号记为 \(s_0\).并且如果 \(i\) 时刻选择了物品 \(s_i\),那么 \(i + 1\) 时刻可以继续选择当前 物品或者选择…
Loj #2494. 「AHOI / HNOI2018」寻宝游戏 题目描述 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生的你对这个活动非常感兴趣.你每天都要从西向东经过教学楼一条很长的走廊,这条走廊是如此的长,以至于它被人戏称为 infinite corridor.一次,你经过这条走廊的时,注意到在走廊的墙壁上隐藏着 \(n\) 个等长的二进制的数字,长度均为 \(m\).你从西向东将这些…
#2509. 「AHOI / HNOI2018」排列   题目描述 给定 nnn 个整数 a1,a2,…,an(0≤ai≤n),以及 nnn 个整数 w1,w2,…,wn.称 a1,a2,…,an 的一个排列 ap[1],ap[2],…,ap[n] 为 a1,a2,…,an 的一个合法排列,当且仅当该排列满足:对于任意的 kkk 和任意的 jjj,如果 j≤kj \le kj≤k,那么 ap[j]a_{p[j]}a​p[j]​​ 不等于 p[k]p[k]p[k].(换句话说就是:对于任意的 kk…
#2508. 「AHOI / HNOI2018」游戏 题目描述 一次小 G 和小 H 在玩寻宝游戏,有 nnn 个房间排成一列,编号为 1,2,…,n,相邻房间之间都有 111 道门.其中一部分门上有锁(因此需要对应的钥匙才能开门),其余的门都能直接打开. 现在小 G 告诉了小 H 每把锁的钥匙在哪个房间里(每把锁有且只有一把钥匙),并作出 ppp 次指示:第 iii 次让小 H 从第 SiS_iS​i​​ 个房间出发,去第 TiT_iT​i​​ 个房间寻宝.但是小 G 有时会故意在指令里放入死…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 从前有一名毒瘤. 毒瘤最近发现了量产毒瘤题的奥秘.考虑如下类型的数据结构题:给出一个数组,要求支持若干种奇奇怪怪的修改操作(例如给一个区间内的数同时加上 c,或者将一个区间内的数同时开平方根),并且支持询问区间的和.毒瘤考虑了 n 个这样的修改操作,并将它们编号为 1...n.当毒瘤要出数据结构题的时候,他就将这些修改操作中选若干个出来,然后出成一道题. 当然了…
题意 题目链接 Sol 神仙题Orz 首先不难看出如果我们从\(a_i\)向\(i\)连一条边,我们会得到以\(0\)为根的树(因为每个点一定都有一个入度,出现环说明无解),同时在进行排列的时候需要保证父亲节点一定在孩子节点之前出现 接下来考虑直接贪心.对于某些权值很小的点,我们需要让其尽早出现,同时又要满足选择的条件. 那么我们可以从小的点开始,依次向他的父亲合并,并删除该点(也就是如果父亲一但被删除,那么这个点立马被删除) 下面的内容抄袭摘抄自这里 然后直接用set搞一搞 复杂度:\(O(n…
loj#2020 「AHOI / HNOI2017」礼物 链接 bzoj没\(letex\),差评 loj luogu 思路 最小化\(\sum\limits_1^n(a_i-b_i)^2\) 设改变量为k \(\sum\limits_1^n(a_i-(b_i+k))^2\) \(\sum\limits_1^n(a_i^2-2*a_i*(b_i+k)+(b_i+k)^2)\) \(\sum\limits_1^n(a_i^2-2*a_i*b_i-2*a_i*k+b_i^2+2*b_i*k+k^2)…
[LOJ 2022]「AHOI / HNOI2017」队长快跑 链接 链接 题解 不难看出,除了影响到起点和终点的射线以外,射线的角度没有意义,因为如果一定要从该射线的射出一侧过去,必然会撞到射线 因此,我们可以把射线的方向规约成两类,分成向上与向下的两种. 不难发现,改变射线的方向后,原有的限制条件并未被改变. 要判断一条线是否规约为"垂直向下",只需判断它的关于P的极角是否在S和T关于P的极角之间. 将所有射线按端点的横坐标排序,依次计算每个端点到S的最短路径上,距离它最近的点nx…
「AHOI / HNOI2018」转盘 可能是我语文水平不太行... 首先可以猜到一些事实,这个策略一定可以被一个式子表示出来,不然带修修改个锤子. 然后我们发现,可以枚举起点,然后直接往前走,如果要等就等到它出现. 因为如果不等,一定要走超过一圈,这样一定不如从它后面那个点当起点. 既然要等,不如我们就在起点等了,显然这样的等价的,于是我们可以搞出这个式子了. \[ \min_{i=1}^n(\max_{j=i}^{i+n-1}S_j-j+i)+n-1 \] 这里我们把\(S\)倍长了 稍微放…
#2023. 「AHOI / HNOI2017」抛硬币   题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到 SSR,让他非常怀疑人生. 勤勉的小 A 为了劝说小 B 早日脱坑,认真学习,决定以抛硬币的形式让小 B 明白他是一个彻彻底底的非洲人,从而对这个游戏绝望.两个人同时抛 bbb 次硬币,如果小 A 的正面朝上的次数大于小 B 正面朝上的次数,则小 A 获胜. 但事实上,小 A…
#2021. 「AHOI / HNOI2017」大佬   题目描述 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语.你作为一个 OIer,面对这样的事情非常不开心,于是发表了对大佬不敬的言论. 大佬便对你开始了报复,你也不示弱,扬言要打倒大佬.现在给你讲解一下什么是大佬,大佬除了是神犇以外,还有着强大的自信心,自信程度可以被量化为一个正整数 CCC,想要打倒一个大佬的唯一方法是摧毁 Ta 的自信心,也就是让…
题面 题解 第\(i\)个数之前的符号是或那么记为0,是与就记为1,得到一个二进数x 然后按位分开考虑,如果这一行是1那么记为1,如果这一位数位0记为0,得到一个二进制数\(b_i\) 第\(N\)行是最高位,如果这一位是1的话,需要有\(x < b_i\) 然后我们把所有\(b_i\)从大到小排个序,对于一个\(r\)要满足按照\(b\)的顺序所有的0不在1的前面,然后找到第一个0出现的\(b_i\),最后一个1出现的\(b_j\),答案是\(b_j - b_i\) 代码 #include <…
题面 题解 考虑我肯定是从一个人出发,开始依次标记,而不会跳过某个人,因为如果我跳过了,那么我之后回来还需要标记它,比不上我等完它再一直走到最后(因为多了走一圈之后走回它的代价) 我们倍长整个序列,我们要求的就是 \(Min_{i = 1}^{n}{Max_{j = i}^{i + n - 1}{T_j - j + i + N - 1}}\) 显然\(j\)越大这个值越小,那么又可以转化成 \(Min_{i = 1}^{n}{Max_{j = i}^{2n}{T_j - j + i + N -…
题面 还有这么诚实的出题人! 我们最多影响20个点,然后把这20个点的虚树建出来,并且枚举每个点的选举状态,如果一个点选或不选可以通过改\(dp[u][0] = 0\)或\(dp[u][1] = 0\)完成 状态应该不多,因为每条边只有三种选的情况,上限是\(3^{m - n + 1}\)的 然后我们考虑递推出\(dp[u][0]\)和\(dp[u][1]\)在更新它虚树上的父亲的方案数,是可以用\(k_0 * dp[u][0] + k_1 * dp[u][1]\)表示的,这个可以递推出来 然后…
题解 把没有门的点缩成一个点 如果\(i->i + 1\)的钥匙大于\(i\),那么\(i\)不可以到\(i + 1\),连一条\(i\)到\(i + 1\)的边 如果\(i->i + 1\)的钥匙小于\(i\),那么\(i + 1\)不可以到\(i\),连一条\(i + 1\)到\(i\)的边 按照拓扑序计算,每次暴力向左和向右扩张,每次扩张碰到的区间和当前这个点扩张的区间没有重叠的部分,于是复杂度就相当于把一条链相邻两个点一个个合并起来,是\(O(n)\)的 代码 #include <…
题解 虽然要求一个dfs序,但是不是从根开始贪心 从最小的点开始贪心,最小的点显然是父亲选了之后马上就选它 那么我们每次把最小的点和父亲合并,两个联通块之间也是如此 对于两个联通块,他们合并的顺序应该是平均值较小的更靠前 因为有两个联通块和为\(S_i\)和\(S_j\),大小为\(B_i\)和\(B_j\) 如果\(S_i * B_j < S_j * B_i\)即\(i\)应该放在\(j\)前面,我们可以得到 \(\frac{S_i}{B_i} = \frac{S_j}{B_j}\) 代码 #…
题意: 在一个序列中 如果有一个子区间 它有一个端点是区间最大值 另一个端点不是这个区间的次大值 就会有p2的贡献 它两个端点分别是最大值次大值 就会有p1的贡献 我们发现这两个条件有一个重合的部分 即区间有一个端点是最大值 再次拆分问题 如果我们只考虑这个区间的左端点是最大值 那么我们可以记录每个节点i右边第一个大于它的值的位置R[i] 那么左端点为i的满足条件的区间有[i, i], [i, i + 1], ..... , [i, R[i] - 1] 第一步展开 如果求右端点是最大值的子区间数…
题意:给定xy数组求 \(\sum_{i=0}^{n-1}(x_i+y_{(i+k)\modn}+c)^2\) 题解:先化简可得 \(n*c^2+2*\sum_{i=0}^{n-1}x_i-y_i+\sum_{i=0}^{n-1}x_i^2+y_i^2-2*\sum_{i=0}x_i*y_{(i+k)\modn}\) 主要问题是求最后一项的最大值,把x反过来重复一遍即可fft,相当于\(2*n...n...1\)和\(1....n\)fft,第2*n+1项到n+2项就是不断平移的答案 //#pr…
「AHOI / HNOI2017」单旋 题目链接 H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能多,效率高,掌握这种数据结构成为了 H 国的必修技能.有一天,邪恶的「卡」带着他的邪恶的「常数」来企图毁灭 H 国.「卡」给 H 国的人洗脑说,splay 如果写成单旋的,将会更快.「卡」称「单旋 splay」为「spaly」.虽说他说的很没道理,但还是有 H 国的人相信了,小 H 就是其中之一,spaly 马上成为他…
「AHOI / HNOI2017」影魔 题目描述 解决这类比较复杂的区间贡献问题关键在于找到计算的对象. 比如这道题,我们计算的对象就是区间中间的最大值. 对于点\(i\),我们找到左边第一个比他大的位置\(L\),以及右边第一个比他大的位置\(R\).当\(L,R\)同时被询问的区间包含是,\(i\)就会贡献\(p_1\).当固定左端点为\(L\),右端在\([i+1,R-1]\)之间的时候会贡献\(p_2\):固定右端点\(R\)是同理.还要额外加上\(i,i+1\)贡献的\(p_1\).…
题面 LOJ #2802. 「CCC 2018」平衡树 题面有点难看...请认真阅读理解题意. 转化后就是,给你一个数 \(N\) ,每次选择一个 \(k \in [2, N]\) 将 \(N\) 变成 \(\displaystyle \lfloor \frac{N}{k} \rfloor\) ,到 \(1\) 停止. 求一共有多少不同的操作序列,也就是操作次数不一样或者某次操作的 \(k\) 不相同. 题解 首先考虑 dp ,令 \(f_i\) 为以 \(i\) 为开头的不同操作序列数. 显然…
题意 LOJ #2541. 「PKUWC 2018」猎人杀 题解 一道及其巧妙的题 , 参考了一下这位大佬的博客 ... 令 \(\displaystyle A = \sum_{i=1}^{n} w_i\) , \(B\) 是已死猎人的 \(w_i\) 的总和 , \(P_i\) 是 \(i\) 当前要被杀死的概率 ... (抄博客咯) 不难有 \(\displaystyle P_i = \frac{w_i}{A-B} \tag{1}\) 如果 不考虑猎人死没死 , 都能被当做目标 qwq (鞭…
题意 LOJ #2540. 「PKUWC 2018」随机算法 题解 朴素的就是 \(O(n3^n)\) dp 写了一下有 \(50pts\) ... 大概就是每个点有三个状态 , 考虑了但不在独立集中 , 考虑了并且在独立集中 , 还没考虑 . 转移就很显然了 qwq 然后要优化嘛 , 把其中两个状态合起来 , 也就是分成考虑了和没考虑了的两种 . 其中考虑了的那种 , 只会存在两种状态 , 要么是在独立集内 , 要么就是与独立集联通 , 没有考虑的 绝对不和独立集联通 就行了 . 然后我们枚举…
Update on 1.5 学了 zhou888 的写法,真是又短又快. 并且空间是 \(O(n)\) 的,速度十分优秀. 题意 LOJ #2538. 「PKUWC 2018」Slay the Spire 题解 首先我们考虑拿到一副牌如何打是最优的,不难发现是将强化牌从大到小能打就打,最后再从大到小打攻击牌 . 为什么呢 ? 证明(简单说明) : 如果不是这样 , 那么我们就是有强化牌没有用 , 且攻击牌超过两张 . 我们考虑把最小的那张攻击牌拿出来 , 然后放入一张强化牌 . \(\becau…
题目链接 loj#2054. 「TJOI / HEOI2016」树 题解 每次标记覆盖整棵字数,子树维护对于标记深度取max dfs序+线段树维护一下 代码 #include<cstdio> #include<algorithm> inline int read() { int x = 0,f = 1; char c = getchar(); while(c < '0' || c > '9')c = getchar(); while(c <= '9' &&…
LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想到先枚举这个\(D\),然后极角序排一下,我们枚举\(A\),对\(B,E,F\)分别统计. 枚举\(A\)的过程中用一个指针维护\(E,F\)的范围,对答案贡献是一个\(\sum\binom{x}{2}\)的形式,容易维护. 然后现在要求\(B\)的方案数,可以发现符合条件的\(BC\)一定满足线段\(…
LOJ 2288「THUWC 2017」大葱的神力 Link Solution 比较水的提交答案题了吧 第一个点爆搜 第二个点爆搜+剪枝,我的剪枝就是先算出 \(mx[i]\) 表示选取第 \(i \sim n\) 个物品所能达到的最大价值,如果当前价值加上后面一段的最大价值都打不到当前最大答案,那么返回 第三个点只有一个包,直接背包 \(f[i][j]\) 表示前 \(i\) 个物品占用空间为 \(j\) 时最大价值 第四.五个点每个物品的体积相同,所以每个包能够放下的物品数量相同,直接建图跑…