自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 Codeforce 600 E. Lomsat gelral(树上启发式合并)

题目大意:给你1号点为根节点的树,树上每个点有一个颜色值,定义一个结点的支配色:该结点的为根的子树内出现次数最多的颜色。一个结点的支配色可能有好几个,求每个节点的支配色的出现次数之和。算法标签:dsu on tree题解:树上启发式合并裸题。如果暴力统计答案 需要 O(n2)O(n ^ 2)O(n2)来统计每个结点的答案。考虑用空间换时间,对每个颜色开一个桶,父节点的答案由子结点的答案合并得...

2019-08-31 10:29:54 134

原创 HDU 6588(HDU多校第一场1011):Function(莫比乌斯反演 + __int128输入输出模板)

题目大意:让你求:∑i=1ngcd(⌊n3⌋,i)mod  998322353\sum_{i = 1}^ngcd(\lfloor\sqrt[3]{n}\rfloor,i) \mod 998322353∑i=1n​gcd(⌊3n​⌋,i)mod998322353n≤1021n \leq 10 ^ {21}n≤1021题解:明显可以按n...

2019-08-28 13:30:50 202 2

原创 洛谷 P3768 :简单的数学题(莫比乌斯反演 + 杜教筛)

∑i=1n∑j=1ni∗j∗gcd(i,j)\sum_{i = 1}^n\sum_{j = 1}^ni * j * gcd(i,j)i=1∑n​j=1∑n​i∗j∗gcd(i,j)=∑d=1n∑i=1⌊nd⌋∑j=1⌊nd⌋i∗j∗d3∗[gcd(i,j)=1] =\sum_{d = 1}^{n}\sum_{i = 1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j =...

2019-08-27 21:29:17 187

原创 洛谷 P3312 :[SDOI2014]数表(莫比乌斯反演 + 树状数组)

令 g[i]=∑d∣idg[i] = \sum_{d | i}dg[i]=∑d∣i​d,题目要求:∑i=1n∑j=1mg[gcd(i,j)]∗[g[gcd(i,j)]<=a]\sum_{i = 1}^n\sum_{j = 1}^mg[gcd(i,j)] * [g[gcd(i,j)] <= a]∑i=1n​∑j=1m​g[gcd(i,j)]∗[g[gcd(i,j)]&...

2019-08-27 16:04:50 125

原创 洛谷 P3704 :[SDOI2017]数字表格(莫比乌斯反演)

代码:#include<bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;const int maxn = 2e6 + 10;typedef long long ll;ll fpow(ll a,ll b) { ll r = 1; while(b) { if(b & 1) r = r * ...

2019-08-26 18:53:29 232

原创 洛谷 P1829 :[国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

题解:假设n&lt;mn &lt; mn<m,一波化简:∑i=1n∑j=1mlcm(i,j)=∑i=1n∑j=1mi∗jgcd(i,j)=∑d=1n∑i=1n∑j=1mi∗jd∗[gcd(i,j)=d]=∑d=1n∑i=1⌊nd⌋∑j=1⌊md⌋i∗j∗d∗[gcd(i,j)=1]\sum_{i = 1}^n\sum_{j = 1}^{m}lcm(i,j) = \sum...

2019-08-26 13:31:59 183

原创 洛谷P2522:[HAOI2011]Problem b(莫比乌斯反演 + 容斥原理)

∑x=ab∑y=cd[gcd(x,y]=k]\sum_{x = a}^b\sum_{y = c}^d [gcd(x,y] = k]∑x=ab​∑y=cd​[gcd(x,y]=k],下界不是从1开始好像有点麻烦?可以容斥一下:设solve(a,b)函数解决的是:∑x=1a∑y=1b[gcd(x,y]=k]\sum_{x = 1}^a\sum_{y = 1}^b [gcd(x,y] = k]∑x=...

2019-08-25 21:01:32 155

原创 洛谷P3327:[SDOI2015]约数个数和(莫比乌斯反演 | 莫比乌斯函数)

首先 d(i∗j)=∑x∣i∑y∣j[gcd(x,y)=1]d(i * j) = \sum_{x | i}\sum_{y|j}[gcd(x,y) = 1]d(i∗j)=∑x∣i​∑y∣j​[gcd(x,y)=1],证明感性理解一下就好。然后整个式子变成:∑i=1N∑j=1M∑x∣i∑y∣j[gcd(x,y)=1]\sum_{i = 1}^N\sum_{j = 1}^M\sum_{x | i}\...

2019-08-25 20:31:51 167

原创 洛谷 P2257:YY的GCD(莫比乌斯反演 | 莫比乌斯函数性质)

题目大意:让你求 ∑i=1n∑j=1m[gcd(i,j)=p],p∈prime\sum_{i = 1}^n\sum_{j = 1}^m[gcd(i,j) = p],p \in prime∑i=1n​∑j=1m​[gcd(i,j)=p],p∈prime转化一下式子,枚举 p:∑p=2n∑i=1n∑j=1m[gcd(i,j)=p],p∈prime\sum_{p = 2}^n\sum_{i = 1...

2019-08-25 11:59:45 232

原创 数列分块(整除分块)入门

大佬讲解博客:https://www.cnblogs.com/peng-ym/p/8661118.html当所求答案式子类似于∑⌊ni⌋\sum \lfloor \frac{n}{i}\rfloor∑⌊in​⌋类型,显然有一个O(n)的方法,但有时 n 特别大,超过了可运行的复杂度之内,这时要应用数列分块:通过打表可以观察到 ⌊ni⌋\lfloor \frac{n}{i}\rfloor⌊in​...

2019-08-24 22:24:57 308

原创 Codeforce 1068:E. Multihedgehog(dfs,图,分析)

题目大意:定义1 - 刺猬图:存在一个点度 >= 3,其它点度为 1.定义一个 k - 刺猬图:由一个中心连接至少3个 (k - 1) - 刺猬图。输入 n,k,输入一个 n 个点的树,判断它是不是一个 k - 刺猬图。题解:首先刺猬图是一棵树(题目有说),将刺猬图画出来会发现,如果你准确的找到了一个刺猬图的根,它满足:每个叶子结点到这个根结点的距离都为 这个刺猬图的阶数,每个子树都是一...

2019-08-24 17:19:42 139

原创 Codeforce 1096:D. Easy Problem(DP,思维)

题目链接:https://codeforc.es/contest/1096/problem/D题目大意:有一个字符串数组,每个位置有一个权值,删掉这个字符要付出这个位置的字符的权值的代价,字符串中可能包含了 “hard” 字符序列,你要删掉一些字符使得字符串中不会出现 “hard” 子序列,求最小删除代价。题解:考虑 “hard” 字符串,当前字符是 “d” 时,要么删掉这个 “d”,要么在...

2019-08-24 16:22:33 247

原创 牛客练习赛 50:D. tokitsukaze and Event(最短路)

题目描述这天,tokitsukaze带着她的舰队去才归一儿海探索。这个海域有n个站点,深海舰队控制着这片海域的m条航线,这些航线连接着这n个点,第i条航线连接着ui,vi两个点。航线都是正确的,也就是说没有重复的航线,也没有任何一个点与自己相连。tokitsukaze的舰队经过第i条航线时,会受到来自深海舰队的ai点伤害。tokitsukaze可以在某个休息站点将接下来的战斗切换至夜战模式,这...

2019-08-24 15:35:39 175

原创 牛客练习赛50(牛客1080F):F.tokitsukaze and Another Protoss and Zerg(组合数学 + NTT + 启发式)

题目链接:https://ac.nowcoder.com/acm/contest/1080/F链接:https://ac.nowcoder.com/acm/contest/1080/F来源:牛客网题目描述还记得校赛的"Protoss and Zerg"吗?(https://ac.nowcoder.com/acm/contest/303/H)这是另一个版本。---------------...

2019-08-24 11:53:23 286

原创 牛客练习赛 50:E. tokitsukaze and Segmentation(DP优化)

题目大意如图(觉得还是有必要写一篇题解,做法有很多,而我只会降智严重的做法)题解:考虑暴力dp,对于每个 i 结尾的数字,枚举前面不为0的数字,设下标为j,若满足sum[i] == sum[j] 则转移dp:tp[i]+=tp[j]tp[i] += tp[j]tp[i]+=tp[j];sum[i] 表示前 i 个数字之和对3的余数。考虑优化:注意到转移方程是一个求和的形式,而且需要满足条件...

2019-08-23 23:03:55 231

原创 Codeforce 1206:D. Shortest Cycle(floyd求无向图最小环(模板))

题目大意:有 n个点( n≤105n \leq10^5n≤105),每个点有个点权,若 aiANDaja_i AND a_jai​ANDaj​ != 0,则i,j之间有一条边(AND是位运算符中的与运算) ,问这个图的最小环是多大,若没有环输出 -1。题解:首先若二进制某一位有超过2个数字在这一位不为0,那么答案就是3,否则,不为0的点不超过200个,可以暴力找最小环,这里用floyd算法 n...

2019-08-23 11:03:31 174

原创 HDU6701(2019杭电多校10):Make Rounddog Happy(单调栈 + 预处理(或分治 + 预处理))

题目大意:初始有一个序列 a,定义 a 的一个子序列是好序列:若 [l,r][l,r][l,r]内 max(al,al+1,..,ar)−(r−l+1)≤kmax(a_l,a_{l + 1},..,a_r) - (r - l + 1) \leq kmax(al​,al+1​,..,ar​)−(r−l+1)≤k 且 al,al+1,...,ara_l,a_{l + 1},...,a_ral​,al...

2019-08-21 23:09:03 224

原创 Codeforce 1068 :D. Array Without Local Maximums(线性dp + 思维)

题目大意:有一个长为 nnn 数组丢失了一部分,已知这个数组的所有元素的取值范围是[1,200][1,200][1,200],并且这个数组满足任意一个元素,它的前面一个或后面一个中一定有一个不小于它,让你复原这个数组,并求有多少种复原方法。题解:(往难的想肯定就难了,实际上这题并不难,掌握了dp的话可能一会就秒了)。当第iii个位置取定值,考虑第 i−1i - 1i−1个数字和 第 iii...

2019-08-18 18:52:12 134

原创 Codeforce 1061 C:Multiplicity(暴力预处理 + dp + 滚动数组)

题目大意:你有一个序列 a,定义 a 的子序列 b是一个good序列当 b 的每一个元素,能被它在b中所处位置的下标整除,求出 a 所有good 序列的数量。题解:考虑 a序列 的第 i 个元素 aia_iai​,保留 aia_iai​ 的所有小于等于 i 的因子,设第 j 个小于等于 i 的因子为 g[j]g[j]g[j],尝试构造一个子序列使得aia_iai​处于第g[j]g[j]g[j]...

2019-08-18 14:55:31 258

原创 Codeforce 1061 :D. TV Shows(multiset + 贪心 + 构造)

题目大意:有 n 个电视节目,每个节目有一个播放时间[ai,bi],你可以租用电视机来播放节目,租用一台电视机要先付 xxx(类似定金什么的),如果你在[a,b]时间段租用,你需要付租用的费用:y∗(b−a)y * (b - a)y∗(b−a)。当电视机播放一个节目时,电视机不能中途跳转到播放其它节目,一个节目被电视机播放时,也不能播到一半然后转到其它电视机去播放。问如何使租用电视机使得你可以播放...

2019-08-17 21:28:16 209

原创 Codeforce 1096 :F. Inversion Expectation(期望 ,分析)

题目大意:有一个长为 n 的排列,有一部分数字丢失了,问你逆序对数的期望是多少。题解:答案的贡献分成三部分:未知部分相当于一个随机排列,设未知数字的个数为cntcntcnt,则未知数字之间的贡献为:ans=cnt∗(cnt−1)4ans = \frac{cnt * (cnt - 1)}{4}ans=4cnt∗(cnt−1)​已知数字和已知数字之间的贡献:经典树状数组nlogn做法可以求得...

2019-08-17 19:28:42 446

原创 Codeforce 1096 G:Lucky Tickets(FFT \ NTT)

题目大意:一个长为 n 的数字串,n 一定是偶数,其中只包括 k 种数位,每种数位的范围是(0−90 - 90−9),允许这个数字串有前导零,如果这个数字串的前半串的数位和与后半串的数位和相等,那么称这个数字串为幸运串,在给定k种数位的情况下,问有多少种长度为 n 的 幸运串。分析:做的时候基本上想到了正解,首先看怎么得到答案:数字串的前半串和后半串是独立的,若已知前半串长为 n2\frac{n...

2019-08-17 19:08:26 192

原创 Codeforce 1185:F. Two Pizzas(暴力 + 状压)

题目大意:有 n 个人 ,每个人有一个喜欢的披萨的口味的集合sis_isi​,口味总共只有9种,有m家披萨店,每家店卖的披萨都带有一个口味集合 tit_iti​,每家店的披萨都有一个价格 cic_ici​。询问,买两块不同店的披萨,满足尽量多的人的前提下最小花费是多少?题解:暴力,因为口味只有9种,从这入手,可以暴力计算出所有口味集合满足的人数。再暴力预处理出只买一块披萨的情况下,所有口味集合的...

2019-08-13 21:53:06 168

原创 Codeforce 1100:E. Andrew and Taxi(二分 + 拓扑排序)

题目大意:给你一个 1e5的有向图,你可以把边反向使得图不存在环,设这个操作的花费为所有你反向的边的权值的最大值,询问要消去所有环你的操作的花费最小是多少。题解:若将图形成环的边全部删掉,剩余的图将是一个DAG,考虑如何把边加回去使得不存在环(这时你可以控制这些边的方向):对DAG进行拓扑排序,若一条边从拓扑序小的点指向拓扑序大的点,那么一定不会成环:因为你再对这个图进行拓扑排序连通部分的访问顺...

2019-08-13 21:42:54 137

原创 Codeforce 1073 C:Vasya and Robot(思维 + 二分(尺取法))

题目大意:一个机器人想要从(0,0) 位置走到 (x,y)位置,它有一个长为n操作序列,由UDLR四种字母组成,代表4种操作:由于这个操作不一定能让它走到(x,y),但是你可以改动其中部分操作使得机器人最后还是在(x,y)这个位置。定义你改动的字母中,最左边和最右边的距离为你操作的距离,问要使得机器人最后在x,y 位置,你的修改操作的最小距离是多少。题解:如果想要贪心构造解使得改动的距离最小...

2019-08-13 21:26:09 202

原创 Codeforce 835 F. Roads in the Kingdom(基环树DP + 单调队列,基环树环上删边使直径最小)

题目大意:给你一棵基环树,让你在环上删掉一条边,使得树的直径尽量小。题解:不考虑删边的基环树的直径是如何做的:对环上每个点树形DP,dp[i][0],dp[i][1]dp[i][0],dp[i][1]dp[i][0],dp[i][1]分别记录i到以 i 为根的子树的最远距离和次远距离,用单调队列处理直径过环的情况。环是双向的,处理过环情况时将环断开复制一倍,然后用单调队列枚举一个点做终点找能和...

2019-08-11 20:04:58 394

原创 Codeforce 559 C. Gerald and Giant Chess(计数类DP + 递推预处理阶乘逆元)

题目大意:给你一个h∗wh * wh∗w 的棋盘,棋盘上n个黑点,其余的都是白点。每次你只能向下走或向右走,问从(1,1) 走到 (h,w) 不经过黑点的路径有多少条,答案对 1e9+71e9 + 71e9+7取模。题解: h和w非常大,但黑点最多只有2000个,所以入手点在黑点。(1,1) -> (h,w) 的总路径数 是C(h + w - 2,h - 1),扣掉经过至少一个黑点的路径...

2019-08-11 16:19:02 238

原创 bzoj 1040: [ZJOI2008]骑士(基环树DP,基环树上最大点权独立集)

题目大意:求基环树上的最大点权独立集。题解:先考虑普通树的最大点权独立集:dp[i][0] 表示不选 i 点,以 i 为根的子树的最大点权独立集,dp[i][1] 表示选 i 点,以 i 为根的子树的最大点权独立集,然后简单树形DP,对于根结点取选和不选中的较大值。基环树,多了对环的处理。思路一:对环上每一个点进行简单树形DP,然后将环上的点提出来做一遍环形DP,处理方法是枚举一个点选和不选...

2019-08-11 14:02:35 368

原创 bzoj 1791: [Ioi2008]Island 岛屿(基环树直径(递归扣环模板))

题目大意:给你一堆基环树,求这些基环树的直径和。题解:求基环树的直径:按直径是否经过环分类讨论:对于不经过环的直径,就是环上的点为根节点所在的子树的直径,取最大值。经过环的直径:显然要求出环上每一个点到它的子树里的点的最远距离 disdisdis。将环复制一倍展开,然后枚举环上每一个点uuu作为终点,用单调队列优化找出 disv−sumvdis_v - sum_vdisv​−sumv​的最大值...

2019-08-10 17:18:23 190

原创 bzoj3924: [Zjoi2015]幻想乡战略游戏(动态点分治 + 欧拉序ST表求LCA)

题目:题解:大坑啊,来自巨佬的题解 https://www.cnblogs.com/bztMinamoto/p/9489473.html题意转化后就是求带权的重心,考虑暴力的做法:设原树的树根 rtrtrt,sumrtsum_{rt}sumrt​为 rt的所有子树的点权的和,disrtdis_{rt}disrt​为rt子树的点到 rtrtrt 的距离和(题目就是要求disdisdis最小的那...

2019-08-09 20:09:09 184

原创 HDU 5536:Chip Factory(01字典树模板)

题目大意:在一个数组中找出 (s[i]+s[j])^s[k] 最大的值,其中 i、j、k 各不相同。题解:01字典树模板,01字典树就是将数字的二进制表示形式插入字典树中,由于二进制只有两种字符0和1,01字典树的结构变得更简单。01字典树可以得到一个数字在一个数组里和谁异或得到的值最大,做法是贪心匹配,字典树上的每一个结点尽量走字符不同的地方。这题还要下标不能重复,做法是:将s 序列加入01...

2019-08-09 16:56:50 123

原创 2019 Multi-University Training Contest 3:Yukikaze and Demons(点分治 + exgcd)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6605题目大意:有一颗树树上每一个点都带有一个十进制位,定义f(u,v)为 u -> v路径上所有点的数位组成的十进制数,询问有多少对点满足f(u,v) % k == 0。题解:树上路径问题,考虑点分治:设当前分治中心为 r, 路径(u,v)可以分为(u,r) ,(r,v)两段,第二段去掉r组...

2019-08-08 19:24:54 170

原创 2019 Multi-University Training Contest 6:Snowy Smile(线段树查询最大子段和)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6638题目大意:在二维平面空间有 n 个点,每个点有一个点权 wi,一个边平行于坐标轴的矩形的权值为该矩形内所有点的点权和。问选取一个矩形点权和最大是多少。题解:先将坐标离散化,以x坐标建线段树,枚举y坐标上界和下界,将y坐标位于上下界内的点加入线段树,每次查询线段树最大子段和。#include...

2019-08-08 15:22:59 132

原创 [SPOJ1825]:Free tour II(点分治 + 启发式合并)

题意:有一颗树,树上有黑点和白点,问两点间满足黑点不超过K个的简单路径的最大边权之和是多少。题解:考虑点分治,以到分治中心的黑点数量为下标建树状数组维护每个点到分治中心的边权之和,合并答案时查询黑点不超过 k的最大值。这样做的复杂度为 n∗logn2n*logn^2n∗logn2,不足以通过 2e52e52e5的数据。不用数据结构,考虑维护 g[i][k][j]:当前分治中心为 i,前 k 棵...

2019-08-08 14:44:44 174

原创 HDU 5977:Garden of Eden(点分治 + 状压预处理)

题意:在一棵有n个点的树上,每个点有一个点权,最多有 k 种点权,问 简单路径上点权种类总共为 k 的点对有多少对。题解:考虑点分治,由于k比较小,用一个state数组记录当前点到分治中心的路径上颜色的种类集合,这个种类集合可以用二进制状压。每dfs完一棵子树,枚举已经dfs过的子树上的点暴力合并,若两个点的状态合并之后集合大小 = k,则更新答案。这样做是 n2log(n2)n^2log...

2019-08-07 18:53:48 209

原创 HDU 4812:D Tree(点分治 + 递推求逆元(模板))

题目大意:一棵 n 个结点的树,每个结点有一个权值,问你是否存在两个点对它们路径上的点值的乘积 mod (106+3)(10^6 + 3)(106+3) = k,如果有,输出字典序最小的方案。否则输出No solution题解:由于时间卡得比较紧,用O(n)递推预处理逆元。因为 106+310^6 + 3106+3 是素数,如果已知 aaa,根据 (a∗b)mod&ThinSpace;&...

2019-08-06 00:10:03 118

原创 洛谷P4178:Tree(点分治模板)

题目大意:询问树上距离小于等于K的点对有多少个#include<bits/stdc++.h>using namespace std;#define lowbit(i) (i & (-i))const int maxn = 4e4 + 10;int n,val[maxn + 10],k,root,f[maxn],sz[maxn],tot;bool done[maxn...

2019-08-05 19:46:02 141

原创 Codeforce :757F - Team Rocket Rises Again(最短路+支配树)

题目链接:https://codeforces.com/problemset/problem/757/F题目大意:有n个城市,m条无向边,起点为s,问炸掉哪一个点会使得 无法以最短的时间到达的点的数量最多,注意有些点本来就到不了,那些点不算在内。题解:先跑一遍dijkstra,根据点对关系 du+wu,v==dvd_u + w_u,_v == d_vdu​+wu​,v​==dv​ 建有向图,...

2019-08-04 14:40:47 172

原创 *2019 Multi-University Training Contest 2:Longest Subarray(线段树+思维)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6602题解:如果右端点固定,每一种元素可行左端点是两段连续的区间(个数 &gt;=k&gt;= k>=k 和 =0= 0=0),扫描右端点,用线段树维护区间最大值来维护每一个元素左端点的可行区间,在每种元素左端点的可行区间做区间 + 1。更新答案时查找 值为 C的下标最小值(值...

2019-08-04 13:44:34 117

原创 2019 Multi-University Training Contest 3:Blow up the city(DAG上构建支配树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6604题目大意:在DAG上,定义出度为0的点为终点,每次询问两个点a,b:有多少种方案 炸掉一个点使得a,b 无法到达任意一个终点。题解:题意可以转化为,从终点出发,到达a,b有多少必经点,也就是支配点。反向建图,由于度为0的点有多个,用一个点作根节点将这些点连起来,然后按拓扑序构建支配树。每一次...

2019-08-04 10:17:23 170

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除