自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

beginend

只要在路上,就没有到不了的远方

  • 博客(37)
  • 收藏
  • 关注

原创 bzoj 4627: [BeiJing2016]回转寿司 线段树

题意给一个序列,求有多少个子串满足其和在[L,R]范围内。 n,|ai|<=100000,L,R<=1e9分析刷道水题找找手感。。。设s[i]表示前缀和。开一棵权值线段树,把整个序列扫一遍,每到一个数就把以这个数结尾对答案的贡献计算一下,然后把s[i]扔进线段树里面就好了。代码#include<iostream>#include<cstdio>#include<cstdlib>#includ

2017-06-30 21:52:50 615

原创 bzoj 4128: Matrix BSGS+矩阵乘法

题意给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) n <= 70,p <=19997,p为质数,0<= A_{ij},B_{ij}< p 保证A有逆。分析首先第一反应肯定是矩阵求逆+BSGS,然后用map来判断矩阵是否相等。 这样的复杂度大概是O(sqrt(p)*n^3),还要矩阵求逆,比较麻烦。在网上看到了几个比较好的优化。 BSGS一般都是设Axw+y≡B(m

2017-06-22 20:39:18 669

原创 bzoj 4013: [HNOI2015]实验比较 树形dp+排列组合

题意链接分析这题光是题目都看了我五分钟。。。先用并查集把等号连接的两个并起来。 题目说明了这给的一定是一篇森林,那么我们只要加个虚根就变成一棵树了。 我们可以把等号看成是边,那么整个序列就被小于号分成了若干块。我们可以设f[i,j]表示节点i为根的子树排成的序列分成了j块的方案数。 枚举一个节点的两个儿子x和y,考虑如何把f[x]和f[y]合并起来。 枚举一个j和k,表示x子树的块数和y子树

2017-06-21 20:26:34 376

原创 bzoj 1283: 序列 费用流

题意给出一个长度为 的正整数序列Ci,求一个子序列,使得原序列中任意长度为 的子串中被选出的元素不超过K(K,M<=100) 个,并且选出的元素之和最大。 N<=1000,k,m<=100。Ci<=20000。分析之前碰到有一题跟这题是一样的,但数据范围小了,于是随便搞个单纯形就水过去了。。。这题的话,我们可以考虑分k次来取数,每次在每个长度为m的子串内最多取一个数,那么显然最后取出来的一定是最优

2017-06-20 20:52:53 448

原创 bzoj 2339: [HNOI2011]卡农 组合数学+递推

题意给出n和m,问选出m个集合,满足这m个集合互不相等且为{1,2,…,n}的子集,且每个数在这m个集合中出现的总次数为偶数的方案。答案模100000007 n,m<=1000000分析想了快一个小时都没想到怎么做。。。首先我们可以把这m个集合变成有序的,然后最后再除以m!就好了。 我们可以设f[i]表示选了i个集合且满足题目要求的方案数。 很重要的一点就是,因为每个数出现次数必然为偶数,所以

2017-06-20 19:55:13 501

原创 bzoj 3681: Arietta 主席树优化建图+网络流+dsu on tree

题意所有的 n 个音符形成一棵由音符 C ( 1 号节点) 构成的有根树,每一个音符有一个音高 Hi 。 Arietta 有 m 个力度,第 i 个力度能弹出 Di 节点的子树中,音高在 [Li,Ri] 中的任意一个音符。 为了乐曲的和谐,Arietta 最多会弹奏第 i 个力度 Ti 次。 Arietta 想知道她最多能弹出多少个音符。 1 ≤ n, m ≤ 10000 。对于所有数...

2017-06-19 21:18:22 734 3

原创 Codeforces 600E Lomsat gelral [dsu on tree(树上启发式合并)]

题意给出一棵树,1为根节点,每个点都有一个颜色。求每个点所在子树内所有出现次数最多的颜色的和。 n分析新学习了一种姿势叫dsu on tree,大概意思就是树上启发式合并吧。 dsu on tree大概是用来解决这样一类问题:需要多次查询某棵子树内的某个值(必须要离线)。像这题就是需要查询每棵子树出现颜色次数最多的颜色的和。 怎么做呢? 首先我们把这棵树的dfs序求出来,顺

2017-06-19 19:22:10 1101

原创 bzoj 4925: 城市规划 差分

题意最近比特镇正在迅速建成。沿着美丽的大街,一座座新建筑拔地而起。小Q喜欢沿着大街走,但问题是不同的建筑位于街对面。为了从一个建筑到另一个建筑,有时需要通过漫长的步行穿过最近的人行道。所以他决定写一个程序,计算如何沿着大街平移所有人行道,使得人行道的布局最有利于行人。他希望尽可能多的人行道出现在某些建筑物的前面,同时人行道的移动距离应当是最小的。 大街以直线表示,人行道被视为这条线上的点。所有建筑

2017-06-18 20:55:57 765

原创 bzoj 4921: 互质序列 数学+枚举

题意你知道什么是“互质序列”吗?那就是所有数的最大公约数恰好为1的序列。 “互质序列”非常容易找到,但是我们可以尝试通过删除这个序列的一个非空连续子序列来扩大它的最大公约数。 现在给定一个长度为n的序列,你需要从中删除一个非空连续子序列,使得剩下至少2个数,令E为剩下数的最大公约数的期望值,S为合法的方案数,请计算E*S的值。因为这个值可能非常大,请对998244353取模输出。 3<=n<=

2017-06-18 20:29:03 1915

原创 bzoj 3589: 动态树 树链剖分+线段树

题意给出一棵树,要求资瓷两个操作: 操作0: 这棵树长出了一些果子, 即某个子树中的每个节点都会长出K个果子. 操作1: 小明希望你求出几条树枝上的果子数. 一条树枝其实就是一个从某个节点到根的路径的一段. 每次小明会选定一些树枝, 让你求出在这些树枝上的节点的果子数的和. 注意, 树枝之间可能会重合, 这时重合的部分的节点的果子只要算一次. n,m<=200000,答案模2^31-1输出

2017-06-17 14:09:24 494

原创 bzoj 4276: [ONTAK2015]Bajtman i Okrągły Robin 线段树优化建图+费用流

题意有n个强盗,其中第i个强盗会在[a[i],a[i]+1],[a[i]+1,a[i]+2],…,[b[i]-1,b[i]]这么多段长度为1时间中选出一个时间进行抢劫,并计划抢走c[i]元。作为保安,你在每一段长度为1的时间内最多只能制止一个强盗,那么你最多可以挽回多少损失呢? n<=5000,ai,bi<=5000分析每个小偷往线段树对应区间上连边然后费用流就好了。代码#include<iost

2017-06-17 12:03:21 492

原创 LibreOJ #504. 「LibreOJ β Round」ZQC 的手办 线段树+堆

题意给出一个序列,要求资瓷两个操作: 1 l r k表示把[l,r]中小于k的数都改成k 2 l r k x表示从小到大输出[l,r]中小于k的x个数,若数量不足则输出-1 n,q<=500000分析比赛的时候想到了分块做法,也就是对每块维护一个有序的数组,然后修改的话整块打标记,多出来的O(nlogn)暴力修改。查询的话把每块最小的那个和多出来的都扔进堆里面,然后每次找到堆顶再把其对应块中该

2017-06-17 09:23:54 924

原创 LibreOJ #505.「LibreOJ β Round」ZQC 的游戏 网络流

题意分析比赛的时候唯一一道想出来的题。。。直接网络流就好了。没啥好说的。代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int N=605;const int inf=0x3f

2017-06-17 08:07:21 736

原创 bzoj 3689: 异或之 字典树+堆

题意给定n个非负整数A[1], A[2], ……, A[n]。对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这样共有n*(n-1)/2个新的数。求这些数(不包含A[i])中前k小的数。 2 <= n <= 100000; 1 <= k <= min{250000, n*(n-1)/2};0 <= A[i] < 2^31分析先对所有数建一棵字典树,

2017-06-15 20:58:52 648

原创 bzoj 2337: [HNOI2011]XOR和路径 期望dp+高斯消元

题意给出一个无向连通图,边有边权。问从1走到n的期望异或值是多少(不一定是简单路径)。 n<=100,m<=10000,v<=10^9分析一开始想到了拆位后dp,但想到的是二维,第二维是0或1,算了一波复杂度发现不对,于是就没管了。注意到每一位的贡献实际上是独立的,那么我们只要把每位的贡献分别计算就好了。 现在问题就变成了边权为0或1,问从1到n的异或值为1的概率。 设f[i]表示从i走到n异

2017-06-15 20:16:08 369

原创 bzoj 3029: 守卫者的挑战 概率dp

题意有n个位置,每个位置有一个权值ai,若ai<0则ai必为-1,且有pi的概率获得这个值。初始值为K。现在问至少获得了L个值且获得的值的和不小于0的概率。 n<=200,L<=n,ai,K<=2000分析设f[i,j,k]表示到第i个位置,拿了j个值,当前和为k的概率。 显然若当前的值大于n的话就一定可以满足和不小于0,那么就把大于n的放到n这里就好了。 转移随便yy一下就好了。代码#inc

2017-06-15 19:28:18 375

原创 bzoj 3168: [Heoi2013]钙铁锌硒维生素 矩阵求逆+构造最小字典序完备匹配

题意给两组向量,每组有n个n维向量。,求一组字典序最小的匹配方案使得把第一组向量的任意一个替换成其对应的向量后满足这n个向量仍然线性无关。 n<=300分析这是14年的集训队论文题。显然第一组向量是n维向量空间的一组基,那么第二组向量显然都可以由第一组向量表示出来。 这里有一个结论,就是若第一组向量的某个向量j可以由第二组向量的某个向量i替换,当且仅当在用第一组向量表示向量i的式子里,j的系数不

2017-06-14 20:16:14 665

原创 bzoj 4011: [HNOI2015]落忆枫音 拓扑序dp+容斥原理

题意给出一个有向无环图(节点1必然可以到达所有点)和任意一条边(可以是自环),问以1为根的生成树有多少种。有向图的生成树是指每个节点与父节点的连边必然是由父节点连向它。 n<=100000,m<=200000分析想到了最后一步,但是没想到这个东西可以用dp来求。。。我们发现一个DAG的生成树数量必然是除了1以外所有点的度数乘积。证明的话随便yy一下就好了。 现在多了一条边,我们考虑用同样的方法来

2017-06-13 20:43:32 431

原创 如何线性求[1,p-1]的逆元

今天做了一下bzoj 4011,顺便学习了一波如何线性递推求[1,p-1]在模p下的逆元。注意p为素数。 设aa的逆元为a−1a^{-1},根据逆元的定义显然有a∗a−1≡1(modp)a*a^{-1}\equiv1\pmod p首先有1的逆元就是1. 假设现在已经球出了[1,a−1][1,a-1]的逆元,现在考虑如何求aa的逆元。设k=⌊pa⌋,r=pmodak=\lfloor\frac{p}

2017-06-13 20:11:54 773

原创 bzoj 3532: [Sdoi2014]Lis 构造字典序最小割

题意给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci。请删除若干项,使得4的最长上升子序列长度减少至少1,且付出的代价之和最小,并输出方案。如果有多种方案,请输出将删去项的附加属性排序之后,字典序最小的一种。 1 < =N < =700 T < =5,Ai,Bi,Ci<=10^9分析如果没有字典序的限制的话,我们可以对在最长上升子序列中的元素进行拆点最小割就可以求出最小代价。

2017-06-12 22:42:13 592

原创 bzoj 2159: Crash 的文明世界 树形dp+第二类斯特林数+排列组合

题意给出一棵树和一个常数m,对于每一个i(1&lt;=i&lt;=n),求出∑nj=1dist(i,j)m∑j=1ndist(i,j)m\sum_{j=1}^ndist(i,j)^m。 n&lt;=50000,k&lt;=150分析首先有一个结论,就是xn=∑ni=1S(n,i)∗F(x,i)xn=∑i=1nS(n,i)∗F(x,i)x^n=\sum_{i=1}^nS(n,i)*...

2017-06-11 21:30:53 1254

原创 bzoj 1063: [Noi2008]道路设计 树形dp

题意给出一个无环图( 也就是树,但是也有可能是森林),代表一个国家的城市。1是首都。每条边是一条公路。现在要在这些公路中选出一些修改成铁路。要求每个城市至多在一条铁路上。修改完后,每个城市到首都可能是铁路公路交叉着走。现在定义一个城市的“不便利度”为到达首都要走的公路的次数。定义国家的不便利度为所有城市不便利度的最大值。问国家的不便利度最小为多少?有多少种修改方案使得可以得到此最小不便利度? n<

2017-06-11 08:14:21 243

原创 bzoj 4802: 欧拉函数 大整数分解

题意求φ(n)\varphi(n) n<=1e18分析直接用pollard rho对n分解质因数就好了。代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef long long

2017-06-08 17:06:44 799

原创 bzoj 3834: [Poi2014]Solar Panels 分块

题意给出a,b,c,d,求最大的n满足存在a<=x<=b,c<=y<=d且gcd(x,y)=n a,b,c,d<=1e9,T<=1000分析考虑枚举答案n,那么问题就转变成了是否满足⌊bn⌋>⌊a−1n⌋且⌊dn⌋>⌊c−1d⌋\lfloor\frac{b}{n}\rfloor>\lfloor\frac{a-1}{n}\rfloor且\lfloor\frac{d}{n}\rfloor>\lfloo

2017-06-08 16:43:42 307

原创 东莞市2014年市队选拔赛 分组 构造二分图最小覆盖方案

题意分析显然判断前缀和后缀是否相等可以用hash。我在比赛的时候打了个贪心,每次都选比较大的组,水了59分。其实可以把每个前缀和后缀都当成一个点,建立二分图,把每个字符串当成一条边,那么问题就转变成了求一个二分图最小覆盖的方案。方法如下: 首先把所有匹配边和匹配点求出来,然后对于每个连通块讨论:若该连通块没有未匹配点,则把该连通块某一侧的点全部选掉即可。否则就从任意一个未

2017-06-07 12:53:21 463

原创 bzoj 2525: [Poi2011]Dynamite 二分答案+树形贪心

某个点上的引线被点燃后的1单位时间内,在树上和它相邻的点的引线会被点燃。如果一个有炸药的点的引信被点燃,那么这个点上的炸药会爆炸。 求引爆所有炸药的最短时间。 1<=m<=n<=300000分析很显然这是要二分答案的,然后贪心一下就好了。一开始想的贪心策略是每次找一个深度最大且未被覆盖的关键点,然后把这个点的第mid个祖先覆盖掉。 这个策略应该是没错的,但有个问题就是每选择一个点时,如果这个点

2017-06-07 09:54:39 673

原创 bzoj 2165: 大楼 倍增floyd

题意xz是一个旅游爱好者,这次他来到了一座新的城市。城市中央有一幢高耸入云的大楼。这幢楼到底有多少层呢?据说和非负整数的个数是一样多的。xz想爬上这座大楼来观赏新城市的全景。这幢大楼的楼层从下至上用从小到大的非负整数编号。每层楼有n个房间,用1到n的正整数编号。楼层之间用电梯连接,电梯只能上行,不能下行或者同层移动。(下楼一般自行解决)电梯用(u,v,w)的形式给出,表示对于任意正整数i,有第i层的

2017-06-05 21:38:47 564

原创 bzoj 1179: [Apio2009]Atm spfa+强连通分量

题意给一个有向图,给定起点,求一条路径(不一定是简单路径)使得经过的点的权值和最大(每个点只算一次),且要在给定的若干个点中选一个作为终点。 n,m<=500000分析我真的sb,居然没有一眼看出正解是啥。。。只要缩点一下然后直接spfa就好了。代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#in

2017-06-05 20:20:47 381

原创 bzoj 4916: 神犇和蒟蒻 杜教筛

题意求A=∑Ni=1μ(i2)和B=∑Ni=1φ(i2)A=\sum_{i=1}^N{\mu (i^2)}和B=\sum_{i=1}^N{\varphi (i^2)} n<=1e9,答案模1e9+7分析md第一问是什么鬼??? 第二问想到是杜教筛(因为不会洲阁筛),但是没想到用哪个函数和f卷起来。其实考虑到f(d)=φ(d)∗df(d)=\varphi(d)*d,要把常数消掉的话,最好就是把f和

2017-06-05 15:53:01 590

原创 bzoj 2434: [Noi2011]阿狸的打字机 AC自动机+树状数组

题意给你一棵trie,每次询问一个串在另一个串中出现了多少次。 n,q<=100000分析好气啊骑士队居然输掉了!!!不过老詹还是很给力的啊。气得我都不想写题了。首先很显然这是一棵trie。 考虑朴素的做法,可以每次把两个串进行匹配,复杂度是O(qn^2)。考虑用AC自动机的fail指针来优化,可以做到O(nq),但仍然会超时。 显然一个串s1在另一个串s2中出现的次数就等于根到s2的结尾中有

2017-06-05 13:20:09 388

原创 bzoj 3308: 九月的咖啡店 费用流

题意深绘里在九份开了一家咖啡让,如何调配咖啡民了她每天的头等大事我们假设她有N种原料,第i种原料编号为i,调配一杯咖啡则需要在这里若干种兑在一起。不过有些原料不能同时在一杯中,如果两个编号为i,j的原料,当且仅当i与j互质时,才能兑在同一杯中。现在想知道,如果用这N种原料来调同一杯咖啡,使用的原料编号之和最大可为多少。 n<=200000分析有个很不那么显然的结论就是,如果一个数出现了,那么其最多

2017-06-04 20:21:12 340

原创 bzoj 3514: Codechef MARCH14 GERALD07加强版 lct+可持久化线段树

题意N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数。 1≤N、M、K≤200,000。强制在线分析比较巧妙的一道题。首先我们把边依次加入,然后每次不能加时就把该边所在路径上编号最小的边弹出,设为ls[i]。特别的,当其可以加入时,ls=0.这个显然可以用lct完成。 然后我们要求区间[l,r]中的联通块个数,就相当于求n-ls[l..r]中有多少个值小于l。 证明

2017-06-03 20:45:17 377

原创 bzoj 3715: [PA2014]Lustra 乱搞

题意Byteasar公司专门外包生产带有镜子的衣柜。 刚刚举行的招标会上,有n个工厂参加竞标。所有镜子都是长方形的,每个工厂能够制造的镜子都有其各自的最大、最小宽度和最大、最小高度。镜子不可以旋转。 如果存在某家工厂满足这样的条件:其他所有工厂能够制造的镜子,它都能够制造。那么这家工厂显然会胜出。若不存在,评判工作将会遇到麻烦。Byteasar想知道,是否存在某家工厂符合上述条件。2<=n<=1

2017-06-02 21:30:13 320

原创 bzoj 3233: [Ahoi2013]找硬币 动态规划

题意小蛇是金融部部长。最近她决定制造一系列新的货币。假设她要制造的货币的面值为x1,x2,x3… 那么x1必须为1,xb必须为xa的正整数倍(b>a)。例如 1,5,125,250就是一组合法的硬币序列,而1,5,100,125就不是。不知从哪一天开始,可爱的蛇爱上了一种萌物——兔纸!从此,小蛇便走上了遇上兔纸娃娃就买的不归路。某天,小蛇看到了N只可爱的兔纸,假设这N 只兔纸的价钱分别是a1,a2…

2017-06-02 21:04:29 720 1

原创 bzoj 3622: 已经没有什么好害怕的了 dp+容斥原理

题意给出两个长度为n的序列,满足任意两个元素互不相同。现在要拿第一个数列的数和第二个数列的数两两匹配,设第一个数列的数大于第二个数列的数的组数为s,问有多少种匹配方案使得s-(n-s)=k n<=2000分析好强啊,根本想不到。。。 题解 先将两个数列排序,设next[i]表示一个最大的j满足a[i]>b[j],f[i,j]表示匹配了第一个数列的前i个数,有j组是a>b,其余不管的方案数。显然

2017-06-02 20:24:14 408

原创 bzoj 1982: [Spoj 2021]Moving Pebbles 博弈论

题意任选一堆,首先拿掉至少一个石头,然后移动任意个石子到任意一些堆中. 谁不能移动了,谁就输了… n<=100000分析题解根本就不是构造性的要怎么想。。。答案就是如果把石子数相同的两堆两两配对能配成n/2对的话就是后手胜,否则就是先手胜。 证明: 首先证明这是必败局面。因为无论先手怎么做,后手总能跟先手做一样的操作,于是先手必败。 再证明其他局面下先手必胜。 若堆数为奇数,则我们把第一小

2017-06-01 21:41:29 411

原创 bzoj 4777: [Usaco2017 Open]Switch Grass 线段树+最小生成树+set

题意给定一张带权无向图,每个点有一个颜色,每次改变一个点的颜色,要求你在操作后输出这个图中最近异色点对之间的距离最近异色点对定义为:一对点颜色不同,且距离最小。 n,m,q<=200000分析有两个很重要的结论: 1、答案只可能是一条边。 2、答案必然在最小生成树上。 证明的话自己yy一下就好了。 我们可以先求出最小生成树,然后对于每个节点开一棵以颜色为下标的线段树,储存的是其所有子节点到

2017-06-01 20:57:48 778

空空如也

空空如也

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

TA关注的人

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