自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

neither_nor

alone_wolf

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

原创 BZOJ3275 Number

偶数之间gcd不为1,显然奇数^2加奇数^2不等于偶数^2,因为奇数可以写成2x+1的形式,所以奇数方模4余1,两个加一起余2,而偶数方模4余0二分图,跑最小割即可#include#include#include#include#include#include#include#include#include#include#include#include#inc

2017-01-03 17:34:24 590

原创 BZOJ2770 YY的Treap

答案就等于两个点之间priority最小那个……线段树维护一下即可。由定义就能得出来嘛#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define

2017-01-03 07:22:56 513

原创 BZOJ4750 密码安全

妈的,新年第一天做BZ上新加的题,我也真TM是颓了对原数列做前缀异或和,设为s,g(L,R)就等于s[R]异或s[L-1]先考虑对每个数求出他作为最大值的区间,单调栈找到左边第一个大于他的位置+1设为l[i],右边第一个大于等于他的位置-1设为r[i]答案就等于然后这题位运算,位运算有独立性,考虑每位分别计算答案,然后第i位的答案乘上2的i次方,加一起即可对于单独的一位,前缀异

2017-01-01 22:41:13 1202 3

原创 BZOJ3114 Uva12546 Lcm Pair Sum

考虑a和b的lcm是n的条件,发现是对于每个质数的幂次,max(a的幂,b的幂)=n的幂然后你会看到m很小,然后考虑枚举每个质数是a的幂次和n相等还是b的幂次和n相等,复杂度T2^n*n然后你就T了,因为T是500的然后你可以用lowbit优化一下变成T2^n,可是没什么卵用,时限两秒还是T了然后你发现每一位是独立的,所以不需要2^n枚举,每位单独算然后乘起来就行了#include

2016-12-30 14:29:09 708

原创 BZOJ4416 [Shoi2013]阶乘字符串

鬼畜题啊……上来看错题,看成子串,n>=6直接无解,n然后就跪了,只好上网找题解,然后看到了一个非常厉害的结论:当n>21的时候无解!好像证明是当n>21的时候C(450,n)然后我们可以f[i]表示要使得状态为i的字符的全排列都出现最少需要前多少个字符然后与处理一下每个位置之后每个字符第一次出现在哪然后对于一个状态i,我们枚举所有这个状态包含的字符x,假设x是最后一个,那

2016-12-29 21:00:23 312

原创 BZOJ3999 [TJOI2015]旅游

水题……链剖然后维护区间最大值,最小值,和区间从左往右走的答案,还有从右往左走的答案即可#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define

2016-12-29 19:21:10 1021

原创 BZOJ2111 [ZJOI2010]Perm 排列计数

我们把整个序列看成一棵树,x的左儿子是2x,右儿子是2x+1这样问题就变成了给这棵树标号,儿子的标号必须比父亲大dp即可f[i]表示以i为根的子树,在标号集合已经确定的情况下的标号方案数如果i是叶子,f[i]=1如果i只有1个儿子,f[i]=f[2i]如果i有两个儿子,f[i]=f[2i]*f[2i+1]*C(siz[2i]+siz[2i+1],siz[2i])siz为

2016-12-29 18:36:44 627

原创 BZOJ1488 [HNOI2009]图的同构

我们可以把每条边存在或者不存在看成是黑和白两种颜色然后这个题就充斥着一股ploya定理的气息但是有关边的置换太蛋疼,我们考虑把点的置换对应到边上找找规律,我们发现对于一个点的置换,如果其存在一个循环节大小为x,那么这x个点的边之间会形成x/2个循环节,如果其存在两个循环节大小分别为x和y,那么两个循环节里的点之间的边会形成gcd(x,y)个循环节我们考虑爆搜点置换,每次枚举当前最大

2016-12-29 18:32:40 1105

原创 BZOJ4033 [HAOI2015]树上染色

考虑dpf[i][j]表示以i为根的子树里有j个黑点,他们对答案的最大贡献是多少这个贡献不仅考虑子树内同色的点两两之间的距离,也考虑子树内的点与子树外的点之间的距离和在子树内的部分然后我们枚举x的每个儿子y,再在1~当前的siz[x]和1~当前的siz[y]中枚举分别放多少个黑点,更新dp值,然后讲siz[x]加上siz[y]复杂度n^2,因为相当于枚举了每个点对这个复杂度分析

2016-12-29 14:51:22 902 1

原创 BZOJ3251 树上三角形

如果一些数不能组成三角形,那么排序后一定满足a[i]+a[i+1]这样的话由斐波那契可得在权值是int范围内的情况下如果数的个数超过了40多的话那么一定能组成一个三角形如果少于限定条件的话排序后暴力即可如果用a[i]+a[i+1]#include#include#include#include#include#include#include#include#incl

2016-12-29 10:49:03 252

原创 BZOJ1908 Pku2054 Color a Tree

网上搜BZOJ搜不到题解,搜PKU才能搜到-_-如果不考虑父亲必须比儿子靠前的话,那么染色序列一定是把所有点从大到小排序那么考虑父亲必须比儿子靠前,最大的点一定在其父亲被染后紧接着被染,因为否则我们可以将其与在其父亲后被染的点的染色顺序交换,答案一定更优我们确定了点x一定在点y被染之后紧接着被染,就相当于可以把点x和点y合并,使得点y的儿子都变成x的儿子,并且染x的时间和代价都加上了染

2016-12-28 20:13:44 762

原创 BZOJ快捷键提交 chrome扩展

前段时间做了做TC,TC上提交什么玩意的都是有快捷键的……然后回来做BZ的时候就特别想用快捷键提交,然而BZ并没有这个功能-_-正好刚刚安了个屏蔽广告的chrome扩展,感觉chrome扩展这个东西非常的强大,于是就学习了一发,然后写了个扩展,支持在BZOJ和大部分hustoj上用快捷键提交除了在chrome中能使用外,chrome扩展在360浏览器等以chrome为内核的浏览器中也能使用

2016-12-28 07:52:27 1340

原创 BZOJ3786 星系探索

ETT搞上,每条边如果是一条从父到子的边,那么设其权值为儿子节点的权值,如果是一条从子到父的边,那么设其权值为儿子节点的权值的相反数,我们用一个splay来维护整棵树的欧拉序,那么一个节点到根的路径的点权和就等于从根走欧拉序到这个点的边权和linkcut操作就相当于区间平移子树加就相当于把区间里父到子的边加,子到父的边减维护区间和就过了注意w[i]开始可以得0#includ

2016-12-27 11:45:37 1331

原创 BZOJ4730 UOJ#266【清华集训2016】Alice和Bob又在玩游戏

同BZOJ4134-_-#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define MAXN 200010#define MAXM 400001

2016-12-26 15:50:45 1016

原创 BZOJ2725 [Violet 6]故乡的梦

想日这道题都得有一年了……今天发现yh都把这题日了,我才终于来日他这题题解网上都烂大街了,我也懒得写……不过这题其实不需要线段树的先任意搞一条S到T的最短路,然后对于不在最短路上的一条边,x->y,假设我们要强制经过这条边的话,最优情况一定是S走最短路到x,再x->y,再y走最短路到T那么S走最短路到x一定是先走一段S到T的最短路,然后离开最短路,y走到T一定是先走一段别的路,然后进入

2016-12-21 15:34:43 1590

原创 BZOJ4724 [POI2017]Podzielno

先猜结论:一个B进制数+B-1后各位数字之和模B-1意义下不变证明:+B相当于在次低位+1,-1相当于在最低位-1,如果某一位加一,如果进位,则下一位会加一,这一位会减去B-1,所以对各位数字之和模B-1意义下的影响是+1如果某一位减一,如果退位,则下一位会减一,这一位会加上B-1,所以对各位数字之和模B-1意义下的影响是-1所以原数+B-1后各位数字之和在模B-1意义下不变那

2016-12-20 20:44:18 907

原创 BZOJ4346 [POI2016]Nadajniki

我们考虑树形dp,对每个子树求出覆盖这个子树需要的最小代价首先发现一个点上放多于2个路由器没卵子意义那么我们考虑一下状态,我们需要用f[i][j][k][l]表示以i为根的子树,i这个点放了j个路由器,i的儿子里有j个路由器(如果大于2个则视为2个),i的父亲至少需要有l个路由器的最小代价,然后挨个子树大力转移即可,不过这样的话复杂度是n*(3^6)的,爆炸了……然后我们就需要压缩一下

2016-12-19 15:20:48 502

原创 BZOJ4345 [POI2016]Korale

在病房里日题真是一种独特的体验……首先考虑求第一问,我们先把所有元素排序,我们用优先队列维护选数的集合,对每个集合维护集合里的元素的和v和最后一个元素(即最大的元素)lst,初始的时候我们把只包含最小元素的集合推入队列,那么我们取出一个队头元素之后,如果队头的lst不是最大的元素,我们只需要再向队列里推入当前集合插入lst+1后的集合以及先删除lst再插入lst+1的集合。如果lst是最大元素

2016-12-17 21:30:49 1195 2

原创 BZOJ4723 [POI2017]Flappy Bird

挺水的题……在手机上写完了1A了……我们挨个障碍物考虑,记录一下当前坐标,因为他要求点的次数尽量少,那么我们算出走到下一个障碍物最少要点多少下,然后判断是否大于当前剩余的可以点的次数即可那么我们只需要维护当前还能点多少次即可,从一个障碍物走到另一个障碍物,可以点的数量就会增加两个障碍物的距离,另外,我们还要求不能撞到上边界,所以每到一个障碍物,剩余次数就和再点多少次碰顶取min即可#i

2016-12-13 16:23:02 539

原创 BZOJ4347 [POI2016]Nim z utrudnieniem

这题。挺厉害我们可以用f[i][j][k]表示前i个数,选的个数模d余j,异或和为k的方案数我们要求的是f[n][0][s],s为所有数的异或和,另外在n是d的倍数的时候要减一可是这样直接转移的话显然会超时我们把所有权重从小到大排序,一个数和所有比他小的数所产生的异或和一定不会超过这个数的两倍所以复杂度就变成了O(dm)#include#include#include

2016-12-12 21:28:21 695 1

原创 BZOJ1954 Pku3764 The xor-longest Path

傻逼题……树上任意两两点间路径异或和等于两点到根路径的异或和的异或值把所有点到根的异或和插到trie里然后查即可#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namesp

2016-12-12 19:03:15 692

原创 UOJ#218 【UNR #1】火车管理

遥想当年,xuruifan想用线段树套可持久化treap日这题,结果最后也只得了80分……为了不步xuruifan的后尘,我orz了题解我们可以用一个线段树来维护当前的所有栈顶元素,支持区间覆盖和区间求和然后我们维护一个主席树,维护每个版本的时候的栈顶元素,并维护每个栈顶元素被加入是在哪个版本,这样在区间压栈的时候我们可以区间赋值,在单点弹栈的时候我们可以先查到栈顶元素被加入的版本,然

2016-12-09 11:15:07 903 4

原创 BZOJ4134 ljw和lzr的hack比赛

今年清华集训D1T1-_-首先我们可以想到n^2的算法,我们对每个点记录一个sg[x],代表以x为根的子树的游戏的sg函数值,然后我们再对每个点记录rem[x],代表删掉从x到根的路径后剩余的游戏的sg值的异或和。容易发现在我们计算x的sg值的时候,x的rem是他所有儿子的sg值的异或和,而对于x的每一个儿子y,y的子树里的所有rem值都会异或rem[x]^sg[y]然后我们求第一个不

2016-12-09 08:59:27 1232

原创 BZOJ4726 [POI2017]Sabota?

打完一场cf,等分顺便日一道POI2017首先显然最劣情况初始的叛徒肯定是叶子并且带头叛变的人一定是从某个叶子往上走一条链因为如果i没有带头叛变,那么i的父亲也一定不会带头叛变,证明显然f[i]表示i不带头叛变的话最小的x那么我们对所有子树大小>k的f值取max即是答案f[i]=max j为i的儿子 (min(f[j],siz[j]/(siz[i]-1))因为对于i的一

2016-11-28 03:09:35 947

原创 BZOJ4721 [Noip2016]蚯蚓

orz ljss我们发现,对于任意两次切割i和j,i证明很显然,假设在第i次切割的时候,切割的蚯蚓长度为x,第j次的时候为y+(i-j)q,那么有x>=y,px+(i-j)q显然大于等于p(y+(i-j)q)那么我们维护三个队列,刚开始的时候把所有蚯蚓排序后推到第一个队列里,然后每次取三个队头里最长的,把他弹出来,再把切开的两半分别推入第二和第三个队列即可#include#inc

2016-11-23 08:17:11 1689

原创 BZOJ4720 [Noip2016]换教室

f[i][j][k]表示前i门课,申请了j次,第i门申请或者不申请转移即可#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define MA

2016-11-22 14:24:06 879

原创 BZOJ4719 [Noip2016]天天爱跑步

考虑链上做法,发现就是把每个路径拆成一次加入和一次删除,然后从前往后扫,走一步所有路径经过当前点的时间就要么加一,要么减一,且要么是一直加一,要么是一直减一,可以用两个数组和指针来维护整体加减用链剖把一个区间转换成O(log n)个区间,即可在树上做#include#include#include#include#include#include#include#inclu

2016-11-22 14:22:07 1611

原创 BZOJ4709 [Jsoi2011]柠檬

考虑DP,f[i]表示前i个的最大价值我们发现对于任意一个i,他所选的最后一段所指定的颜色一定是i的颜色,因为否则的话i这个点就会没有贡献,一定不如最后一段只选一个i那么在最后一段所选的颜色一定是i的情况下,最后一段的开头的颜色也一定是i的颜色,否则开头一段也没有贡献,不然单分出去一段那么对于f[i],假设之前存在一个点j,这个点的颜色a[j]与i的颜色a[i]相等,那么我们可以让f[

2016-11-22 14:06:30 2517 9

原创 NOIP2016 秀逗记&口胡题解

秀逗记DAY1早上到了吉大南校,跟绿羊腿xuruifan还有commonc还有ZMiG扯了半天淡,然后和commonc去找吉林一中的wzj和sjt扯了一会淡,就进考场了……进去先敲了头文件,然后看T1额,好难啊,这是T1难度么,虽然也是傻逼题……然后敲了一会,过了样例,中途还不小心把存名称的char数组开成了一维的,调了两分钟然后看T2,看起来就感觉很厉害的样子,心想反正是个N

2016-11-19 13:49:52 1162

原创 BZOJ4715 囚人的旋律

看完了题还没做我就先下了个游戏玩-_-23333即是求极长上升子序列的个数f[i]表示只考虑前i个数,以i为结尾的极长上升子序列个数dp即可对每个后边没有比他大的的点,把f值加起来,即是答案#include#include#include#include#include#include#include#include#include#include#incl

2016-11-10 13:56:08 884

原创 BZOJ4702 装箱游戏

一眼sg函数……但是c太大了,不过我们发现如果n>根号c,那么如果m>1的话一定是先手必胜的,所以n>根号c的部分只算m=1的就行了考虑一下什么时候能平,当且仅当n初始得1,且对于任意的n=2,m=i,i>=初始的m的情况,都是先手必胜,那么两人都只能一直加m,然后就会平复杂度(m sqrt c)#include#include#include#include#includ

2016-11-09 13:29:01 735

原创 BZOJ4712 洪水

永恒的一氧化碳大爷在讨论版里发了个单log的做法,还没来得及看……先写个链剖再说考虑没有修改的情况,我们可以树DP,f[x]表示把x的子树截断的最小代价,v[x]表示截断每个点的代价,然后我们求出每个点的s[x],代表x的所有儿子节点的f之和,f[x]就等于min(v[x],s[x])考虑修改,一次修改操作后,v[x]会增加,f[x]可能增加,可能不变,如果f[x]增加了d,那么从x到

2016-11-07 10:22:16 1481

原创 BZOJ4705 棋盘游戏

TC SRM 555 DIV1 的原题……我们发现进行了一系列操作后黑格子的数量只与有多少行被进行了奇数次操作以及有多少列被进行了奇数次操作有关假设有i行进行了奇数次操作,j列进行了奇数次操作,那么黑格子的数量等于i*m+j*n-2*i*j那么我们枚举一个i,如果n-2*i不得0,那么j=(s-i*m)/(n-2*i),否则如果i*m==s,则j可以取0~min(c,m)之间的任意值

2016-11-03 15:55:43 831 1

原创 BZOJ3850 ZCC Loves Codefires

考虑a排在b前边的条件at*bv即at/av排序即可#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define MAXN 100010

2016-10-31 10:59:38 496

原创 LCT维护子树信息(子树信息LCT) LCT维护边权(边权LCT) 知识点讲解

扯淡(前言)众所周知LCT可以支持关于点权的链修改,换根,LINK,CUT和查询链信息操作,但是总有那么些神犇(毒瘤)出题人会让你在支持链修改,换根,LINK和CUT操作的情况下去支持子树查询,或者维护关于边权的链修改,换根,LINK,CUT和链查询。网上似乎讲解这两种LCT写法的blog比较少或者不怎么能搜到?总之我来写一发(LCT基础知识回顾)为了方便说话先说一下下面可能出现的

2016-10-31 10:07:26 9379 15

原创 BZOJ3709 [PA2014]Bohater

妈妈我终于把这题过了今天左边神犇突然问我这题,然后我突然发现这尼玛不是和wf2016 swap space一道题么然后交了一发还是没过然后BeyondW告诉我血量=0就算死了-_-然后就过了把算法和证明写了吧具体地,把怪物按照打完之后加血还是扣血分类,显然先打加血的后打扣血的,对于所有加血的怪,显然先打掉血少的对于所有掉血的怪,我们要先大加血多的证明:设

2016-10-28 08:37:28 858

原创 BZOJ2151 种树

额,好久不刷BZ了,这个月一直在做TC和CF-_-这题,每次选当前最大的,然后把这个,这个左边和这个右边都删了,在这个位置加进来一个新数,值等于左边加右边减自己用链表+set维护即可跟生日礼物基本一样#include#include#include#include#include#include#include#include#include#include#i

2016-10-27 12:57:43 611

原创 BZOJ3425 Poi2013 Polarization

首先我们要证明这道题的一个性质:最优解一定具有如下形式:以树的某一个重心(可以是任意一个)为根,根的每一个子树里的所有边要么都指向根,要么都指向叶子引理:首先对于一棵树,我们把所有边的朝向反转,那么好的点对数不变,显然那么我们要证明树中一定存在一个点,我们称之为“犇点”,其满足以他为根,他的每一个子树里的所有边要么都指向根,要么都指向叶子假设不存在一个犇点,那么树中一定存在点对(x,y

2016-10-02 23:54:44 1171

原创 BZOJ2951 [Poi2001]Goldmine

把所有点按x坐标排序,然后双指针扫一下,一个指针扫右边界,另一个扫当前右边界的时候的最靠左的左边界,线段树维护每个下边界的答案#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing nam

2016-09-29 13:35:37 585

原创 BZOJ3613 [Heoi2014]南园满地堆轻絮

发现答案是最大的(a[i]-a[j]+1)/2满足i想想的话好像还挺显然的#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define MAXN

2016-09-28 17:19:12 525

空空如也

空空如也

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

TA关注的人

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