摘要: 题意:给定一个序列a,求出这个序列的所有无序数对(一共有n*(n-1)/2个)的差的绝对值的中位数 显然,n^2枚举是会TLE掉的,那么我们换一种思路:二分答案; 对于每个答案,我们可以O(nlogn)验证,比较好想; 然后如果常熟大的话还是会TLE,怎么办呢? 那就是把验证复杂度降为O(n) 其实 阅读全文
posted @ 2019-10-24 19:42 神之右大臣 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 题面 这种数据范围不是乱搞dfs就是乱搞状压DP 首先应该通过任一方式求出a和b的值; 任意一条抛物线只用两头猪就可以确定,所以我们N^2枚举,并把在这两头猪的抛物线上的猪都存进状态state[i][j]; 然后枚举任意两个还没消灭的小猪i,j;f[i|state[j][k]]=min(f[i|st 阅读全文
posted @ 2019-10-23 20:16 神之右大臣 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 题面 首先发现:一个数最多会出现1次; 然后深入推出:一个数不会既用它又用它的相反数; 这样就可以依次考虑每一位了: 如果所有的数都不含有这一位,那么就直接把所有的数除以2 如果含有,那么就减去这一位的数,再除以2; 2 当含有的时候搜索就可以了; 注意需通过去重来优化dfs,否则会TLE掉; 阅读全文
posted @ 2019-10-23 19:18 神之右大臣 阅读(266) 评论(0) 推荐(1) 编辑
摘要: 一棵树,如果有序点对(x,y)之间路径的长度取模于3==0,那么ans0便加上这个长度; 如果取模于3==1,那么ans1便加上这个长度; 如果取模于3==2,那么ans2便加上这个长度; 让你求ans0,ans1,ans2; 输入格式: 第一行包括一个整数n,表示一共有n个点 下面n-1行,每一行 阅读全文
posted @ 2019-10-22 20:55 神之右大臣 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 题面 正解与图书馆馆长的考验一致,都是分层图SPFA; 阅读全文
posted @ 2019-10-18 20:02 神之右大臣 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 题面 首先你会发现一个性质:一个图符合条件当且仅当E<=2*V-2; 因为假设图中有2*V-2条边,为了符合条件,一定是有一颗白色生成树和一颗黑色生成树。可以看出,没有其他的情况; 那么如果再多一条边呢?显然,填在任意位置都会使任意一颗树变成基环树,导致一种颜色成环,不成立; 所以E的最大值就是2* 阅读全文
posted @ 2019-10-16 09:58 神之右大臣 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 题面 目的:求出树的各边长度 条件:每个节点之间最短路、整个图中不存在负边 我们可以每一次把一个点加入树内,求出这个点和已经构建好的树的边的长度; 这个长度抽象理解一下就是(dis[i][j]+dis[i][root]-dis[root][j])/2 为什么?因为上面的式子中这条边刚好遍历了两次; 阅读全文
posted @ 2019-10-15 10:05 神之右大臣 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 题面 对于每个点建立一颗主席树; 然后按照树上差分的思想统计主席树的前缀和; lca+主席树+前向星存表就可以了; 阅读全文
posted @ 2019-10-15 09:25 神之右大臣 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 在DAG中,用尽量少的简单路径,覆盖DAG的所有顶点,这叫做DAG的最小路径点覆盖; 最小不相交路径覆盖:每一条路径经过的顶点各不相同。 最小可相交路径覆盖:每一条路径经过的顶点可以相同。 先看最小不相交路径覆盖,我们将它进行拆点二分图,对于图中存在的边(i,j)连接(i,j'); 特别的,每个点自 阅读全文
posted @ 2019-10-11 20:33 神之右大臣 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 题面 挺好的一道树剖模板; 首先要学会最模板的树剖; 然后这道题要注意几个细节: 初始化时,seg[0]=1,seg[root]=1,top[root]=root,rev[1]=root; 在线段树上进行操作时,要使用lazy标记; 对于一个以x为根的子树,它子树中所有的元素一定时在线段树上连续的区 阅读全文
posted @ 2019-10-11 10:41 神之右大臣 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 1.USACO08JAN Telephone Lines 题面 由于问的是最大值最小,所以二分加验证就好了 比较显然的,题干问的是第k+1长的路最短; 那么二分答案是正确的方向; 但是怎么验证? 我们可以将所有边权大于二分的答案的边视为边权是1,否则看成0; 然后从1~n跑最短路,如果答案大于二分的 阅读全文
posted @ 2019-10-10 19:32 神之右大臣 阅读(437) 评论(0) 推荐(0) 编辑
摘要: 题面 首先忽略掉题中k的限制(油量的限制); 那么很清楚的发现:对于一个点(i,j);向(i+1,j),(i,j+1)建立一条容1费0的边;向(i-1,j),(i,j-1)建立一条容1费B的边; 很清楚的:从(1,1)到(n,n)跑费用流就好了; 那么加上k的限制呢? 由于k很小,所以我们可以建立分 阅读全文
posted @ 2019-10-10 12:00 神之右大臣 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 首先谈到矩阵,那么就会想到线性代数,但我太蒟蒻了,所以并不想谈那么深,所以就只说说其中一部分; 首先说初等行变换: 1.用一个非0的数乘某一行 2.把其中一行的若干倍加到另一行上; 3.交换两行的位置; 当然,初等列变换的定义与初等行变换的定义类似,这里便不多说了; 接着说高斯消元: 一个矩阵通过初 阅读全文
posted @ 2019-10-10 07:56 神之右大臣 阅读(611) 评论(0) 推荐(0) 编辑
摘要: 1.扩展欧几里得: void Exgcd(ll a, ll b, ll &x, ll &y) { if (!b) x = 1, y = 0; else Exgcd(b, a % b, y, x), y -= a / b * x; } int main() { ll x, y; Exgcd (a, p 阅读全文
posted @ 2019-10-08 13:17 神之右大臣 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 首先来说定义: 在一个有向图中,每个点都有一个点权: 闭合子图:对于这个子图,它任意一个点的的后继必须在这个子图中; 最大权闭合子图:在所有的闭合子图中,该图的点权和最大; 求最大权闭合子图是标准的网络流建模模型; 首先我们建立超级源S和超级汇T;把所有点权为正的点与S连接一条有向边,方向是从S到u 阅读全文
posted @ 2019-10-05 20:30 神之右大臣 阅读(282) 评论(0) 推荐(0) 编辑
摘要: Day1: 讲的DP,然鹅并没有太多新题。有一个什么石子合并,让我了解到了加西亚瓦克斯算法,嗯,是个不错的东西,但用处不大啊~; 模拟测试270,T1是打表找规律。T2裸的网络流,T3是个大模拟,没啥可说的; Day2: 考了一天试啊,还说什么day1难度?那恐怕没人能拿省一了; 上午T1是一道小模 阅读全文
posted @ 2019-10-05 18:30 神之右大臣 阅读(149) 评论(2) 推荐(0) 编辑
摘要: 题面 这道题是一道不错的计数类DP; 首先我们一定要跑一遍dijkstra来求得每个点到1号点的最短路; 注意题干,题中并没有说所有点都可以到达n好点,只说了存在一条1号点到n号点的路径;所以我们在反向图上BFS求出那些点可以到达n号点; 然后就是dp。我们设计状态:f[u][rest]表示到达u号 阅读全文
posted @ 2019-10-05 10:32 神之右大臣 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 想必大家都会求最短路吧,这里就不再多说了;我看有很多人在一顿套模板,什么dijkstra,SPFA等等,这是可以的;但身为OIer,思路要开阔对不对?首先我们注意到,我们可以利用bfs来求每个点的深度。因为在所有边边权为1的时候,点的深度就是点的最短距离;这样在写法上便少了队列优化SPFA中退栈时还 阅读全文
posted @ 2019-10-04 20:23 神之右大臣 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 题面 这是我做的第一道概率DP题; 做完后发现没有后效性的DP是真的水; 在这里说主要是再捋顺一下思路; 设f[i][j]表示有i只白鼠,j只黑鼠是获胜的概率; 显然:f[i][0]=1; 然后分四种情况: 1.先手刚好拿到白鼠:概率是i/(i+j); 2.先手拿到黑鼠,后手拿到了白鼠:概率为0; 阅读全文
posted @ 2019-09-30 15:06 神之右大臣 阅读(193) 评论(0) 推荐(0) 编辑
摘要: ST表,听起来高大上,实际上限制非常多,仅仅可以求最值问题; 为什么?先从原理看起; st表运用了倍增的思想:st[i][j] = min(st[i][j - 1],st[i + 2^(j - 1))][j - 1]); 意义是:从i开始向后连续2^j个位置的最大值是,i开始向后连续2^(j-1)个 阅读全文
posted @ 2019-09-29 16:23 神之右大臣 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 题面 这道题有着较小的n,所以求最短路时floyd也可以胜任; 设g[i][j][k]表示目前从i到j存在权值为k的路径; 由于边权均为1,所以g[i][j][k]=g[i][p][k-1]+g[p][j][k-1]; 对于f[i][j];如果i到j可以1步过去,那么=1;否则=inf; 然后跑fl 阅读全文
posted @ 2019-09-29 14:38 神之右大臣 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 异或 【题目描述】 给定一个正整数 n,在 [1,n]的范围内,求出有多少个无序数对(a,b)满足 gcd(a,b)=a xor b。 【输入格式】 输入共一行,一个正整数 n。 【输出格式】 输出共一行,一个正整数表示答案。 【输入输出样例】 【输入样例】 3 【输出样例】 1 【样例解释】 只有 阅读全文
posted @ 2019-09-29 14:34 神之右大臣 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 在dinic中,我们会发现,dfs中每条边都会遍历至少一遍,那么我们可以把一定不会用到的边删去吗? 答案是当然可以,这就用到了当前弧优化; 其实这个优化在很久很久以前学习欧拉回路的时候就接触到了; 每次增广一条路后可以看做“榨干”了这条路,既然榨干了就没有再增广的可能了。但如果每次都扫描这些“枯萎的 阅读全文
posted @ 2019-09-29 14:19 神之右大臣 阅读(853) 评论(0) 推荐(1) 编辑
摘要: 分块,是一种优雅的暴力,它通过对数列分段,完成对数列一些区间操作和区间查询的操作,是一种根号算法。 分块的功能: 1.区间加;2.区间减;3.。。。。。。 4.查询区间和 3.查询任意区间内有多少个数大于等于k(注意,这个功能是我们使用分块而不选择线段树的重要依据) 在我的分块中,block表示原数 阅读全文
posted @ 2019-09-27 20:42 神之右大臣 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 题面 刚看到这道题的时候用了个树状数组优化前缀和差分的常数优化竟然AC了?(这数据也太水了吧~) 本人做的第一道分块题,调试了好久好久,最后竟然没想到二分上还会出错!(一定要注意)仅此纪念; 阅读全文
posted @ 2019-09-27 20:27 神之右大臣 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 题面 // <![CDATA[ hitokoto() // ]]> 这道题似乎可以用单调队列优化DP做,但这里讲的是一种差分约束的思路; 设s[i]表示1~i中选了多少个; s[b[i]]-s[a[i]-1]<=1; s[b[i]]-s[a[i]-1]>=1; s[i]-s[i-1]<=1; s[i 阅读全文
posted @ 2019-09-27 10:34 神之右大臣 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 题面 题面说的乱糟糟的看起来似乎是个可持久化线性基; 然而~ 一个式子搞定一切: a^b<=a+b 那么把所有数异或起来便是答案; 阅读全文
posted @ 2019-09-26 13:15 神之右大臣 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 题面 想必各位大佬一定想到了把现在和目标值不一致的边加入到一个新建的图上; 问题就变为了在新的图上寻找有多少个欧拉回路,并输出这些路径; 我们可以用栈来记录情况,然后对于会回答稍微处理处理就好了; 阅读全文
posted @ 2019-09-25 16:02 神之右大臣 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 题面 这道题稍微想一想就会联想到树形DP的入门题:没有上司的舞会; 但是再想一想会发现这根本就不是一颗树,因为它比树多了一条边; 这时候我们引入一个新的概念:基环树; 顾名思义(??),基环树就是在一颗树上填一条边构成的一个图;基环树也叫环套树(明明更像树套环)。 我们在树上可以做的事情基本都可以在 阅读全文
posted @ 2019-09-24 14:21 神之右大臣 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 题面 这道题是一道比较水的XXOI题; 我们可以发现,反着思考题目就变为了让所有叶子节点同时发出信号,然后这些信号同时到达根节点; 可以证明,这样答案不会改变; 那么我们可以自下而上dfs(),设f[u]表示以u为根,可以到达的最远距离; 那么很显然,对于点u,它对答案的贡献度就是num(它子节点的 阅读全文
posted @ 2019-09-23 15:45 神之右大臣 阅读(141) 评论(0) 推荐(0) 编辑