自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 luogu P2680 运输计划

题面传送门代码难度稍大,思路其实不难。题目求最大最小,那么就是二分。那么怎么验证呢。首先预处理出所有航线的时间,然后跑出大于midmidmid的航线,在树上差分。只有每一条航线都经过的路径才可能满足要求,所以先找出这样的路径。对于每一条边,我们都把权值放在下面的节点上,这样的话就可以直接跑一遍验证有没有符合要求的答案。但是这道题要卡常。首先用unsignedunsignedunsigned intintint别用longlonglong longlonglong,这样会快一倍。然后缩小一

2020-06-30 22:03:45 71

原创 luogu P3950 部落冲突

题面传送门树剖裸题,感觉难度虚高。当两个部落开战时,我们就把下面那个点的权值设为111,休战则设为000即可。这样有一个好处就是查询时如果有111可以直接跳出。其他基本操作。代码实现:#include<cstdio>#include<cstring>using namespace std;int n,m,k,f[600039],x[300039],y[300039],hxy,sx,sy,sz,idea,id[300039],top[300039],d[300039]

2020-06-30 21:55:53 78

原创 luogu P2982 [USACO10FEB]Slowing down G

题面传送门很裸的一道题。感觉难度虚高。可以先把这棵树的欧拉序跑出来,然后每次询问是根节点到当前点的权值,那么树状数组随便维护一下就好了。代码实现:#include<cstdio>#include<cstring>using namespace std;int n,m,k,x,y,ans,tot,pus,dfn[200039],l[100039],r[100039],dh,f[200039];struct yyy{int to,z;};struct ljb{ int

2020-06-30 21:53:12 135

原创 luogu P1073 最优贸易

题面传送门因为只有一次贸易,所以可以枚举中转点。从点111出发跑最小值SPFASPFASPFA,从点nnn出发跑最大值SPFASPFASPFA,这个贪心应该都懂。然后枚举中转点,注意跑不到的点不能枚举。代码实现:#include<cstdio>#include<cstring>#include<queue>#define min(a,b) ((a)<(b)?(a):(b))#define max(a,b) ((a)>(b)?(a):(b))

2020-06-30 21:50:55 95

原创 luogu P4315 月下“毛景树”

题面传送门普通树剖,注意线段树标记下推清零时左右儿子的懒标记要清零代码实现;#include<cstdio>#include<cstring>#define max(a,b) ((a)>(b)?(a):(b))using namespace std;int n,m,k,son[100039],siz[100039],d[100039],fa[100039],id[100039],idea,top[100039],x[100039],y[100039],z[1000

2020-06-28 16:37:07 80

原创 CF343D Water Tree

题面传送门感觉评分虚高。其实和NOI2015NOI2015NOI2015的软件包管理器差不多,题解正常操作,直接区间覆盖即可。一不小心拿了个次优解代码实现:#include<cstdio>#include<cstring>using namespace std;int d[500039],idea,siz[500039],top[500039],son[500039],id[500039],fa[500039],x,y,z,n,m,k,f[2000039],sum

2020-06-27 21:58:40 546

原创 luogu P4114 Qtree1

题面传送门spojspojspoj卡语言太恶心所以来洛谷上交了。正常树剖不解释但是有些地方可以写法优化。比如线段树只要一个数组就够了。代码实现:#include<cstdio>#include<cstring>#define max(a,b) ((a)>(b)?(a):(b))using namespace std;int n,m,k,sx,sy,sz,x[300039],y[300039],z[300039],id[100039],idea,son[1000

2020-06-27 21:54:58 118

原创 luogu P1505 [国家集训队]旅游

题面传送门第一次一遍过国集紫题。好激动。一看就是树剖,只不过操作有点多。把每条边的权值放在儿子节点即可。对于取相反数放懒标记即可。其他是树剖正常操作。代码实现:#include<cstdio>#include<cstring>#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))using namespace std;int n,m,k,sx,sy,sz,x[2000

2020-06-27 21:50:12 127

原创 luogu P3038 [USACO11DEC]Grass Planting G

题面传送门这里可以把边权转化成点权,即把边的值放在儿子节点上,这样能确保唯一性。而这样的话lcalcalca就不能算了,可以通过id+1id+1id+1处理掉。树状数组维护即可。代码实现:#include<cstdio>#include<cstring>using namespace std;int n,m,k,x,y,z,id[100039],idea,d[100039],siz[100039],son[100039],top[100039],fa[100039],

2020-06-26 21:42:17 177

原创 luogu P6098 [USACO19FEB]Cow Land G

题面传送门一眼看上去就是树剖裸题。线段树无所不能,连异或都可以维护。直接树剖即可。代码实现:#include<cstdio>#include<cstring>using namespace std;int n,m,k,idea,son[100039],siz[100039],d[100039],top[100039],fa[100039],id[100039],a[100039],x,y,z,sx,f[400039];struct yyy{int to,z;};st

2020-06-26 21:39:50 149

原创 luogu P2146 [NOI2015]软件包管理器

题面传送门NOINOINOI终于出了一道水题。因为软件包之间有依赖,所以删除一个要把子树删完。安装一个要把路径上全部安装掉。直接树剖即可。代码实现:#include<cstdio>#include<cstring>using namespace std;int n,m,k,x,y,son[100039],fa[100039],siz[100039],d[100039],id[100039],idea,top[100039],z,f[400039],sum[400039]

2020-06-25 22:19:49 148

原创 luogu P3833 [SHOI2012]魔法树

题面传送门直接树链剖分即可,还比模板少两个操作。代码实现:#include<cstdio>#include<cstring>using namespace std;int n,m,k,x,y,idea,son[100039],d[100039],fa[100039],top[100039],id[100039],siz[100039];char _s;long long z,f[400039],sum[400039];struct yyy{int to,z;};s

2020-06-25 22:17:24 76

原创 luogu P1600 天天爱跑步

题面传送门这道题目蛮好的。首先暴力不可取,会TTT考虑分类讨论,把一段路径分为上行与下行。设dxd_xdx​为xxx节点的深度,则在上行时被观察到当且仅当dv+tv=dud_v+t_v=d_udv​+tv​=du​,下行也可推出当且仅当dv−tv=dud_v-t_v=d_udv​−tv​=du​那么直接在树上差分哪一段有贡献。求答案就是在子树内找与那个数相同的点的个数就好了。应该都会吧开桶记录即可。代码实现:#include<cstdio>#include<cstring

2020-06-25 22:15:14 89

原创 luogu P4427 [BJOI2018]求和

题面传送门看到树,想到树剖。然而线段树维护不了这么高次项的数啊。再转眼一看,k≤50k\leq 50k≤50那不就可以直接前缀和了吗?这道题在省选时极其卡时限,所以可以先预处理出深度的kkk次方。然后直接树上前缀和即可。代码实现:#include<cstdio>#include<cstring>#define mod 998244353using namespace std;int fa[300039][20],q[300039][59],n,m,x,y,z,d

2020-06-25 22:09:39 85

原创 luogu P3258 [JLOI2014]松鼠的新家

题面传送门只有一次查询,想到差分。那么我们怎么把差分运用到树上呢?自然要在lcalcalca上下文章了。可是不能直接在lcalcalca上下,得在falcafa_{lca}falca​上下,即fu++,fv++,flca(x,y)−−,ffalca(x,y)−−f_u++,f_v++,f_{lca(x,y)}--,f_{fa_{lca(x,y)}}--fu​++,fv​++,flca(x,y)​−−,ffalca(x,y)​​−−注意不是每个点都出现,我因为这个调了一天。代码实现:#inclu

2020-06-24 20:21:24 91

原创 luogu P4281 [AHOI2008]紧急集合 / 聚会

题面传送门其实这道弱省省选还蛮简单的。稍微思考一下我们就可以得出一个结论:集合点肯定在三个点中某两个点的lcalcalca上。因为无论这个点朝哪个方向移都是靠近一个点远离两个点肯定不会更优。所以我们可以先跑出三个点的lcalcalca然后再分别算答案输出。但是这样要跑666遍lcalcalca,在qzezojqzezojqzezoj上过不去淦。考虑优化。然后我们又思考一下就可以优化一下结论:与其他两个不一样的lcalcalca为最优点。因为其他两个点肯定高于原来最高的一个点,而这个点更靠近下

2020-06-24 20:17:44 171

原创 luogu P3384 【模板】轻重链剖分

题面传送门这道题是树剖模板。树剖第一步:dfs1dfs1dfs1,找出每个点子树大小,父亲节点,重儿子,深度。第二步:dfs2dfs2dfs2,找出每个点编号,把原来的权值赋值过来,先标重儿子再标轻儿子,标记每个链顶。这里最大的点最多只有lognlognlogn条链。因为每更换一条链都要一个轻链,而点数会除以222修改两点距离就直接哪个深度大哪个先跳,复杂度log2nlog^2nlog2n查询两点距离相同修改子树直接因为编号连续就直接查询整段,复杂度lognlognlogn查询相同代码实

2020-06-21 16:12:26 122

原创 lugou P2863 [USACO06JAN]The Cow Prom S

题面传送门这道题很明显是要我们求强连通分量。我们可以用TarjanTarjanTarjan求。对于TarjanTarjanTarjan的求法,是这样做的:记录第几个访问到:用一个dfndfndfn数组。记录这个点的子树能访问到的最早访问到的点,为lowlowlow。记录一个栈,表示没有弹出的点。记录visvisvis,表示是否在栈里。对于每个点,从它的边走出去的一个点vvv。若这个点在栈中,那么这个店肯定不属于这个强连通分量,那么就不用搜索,直接获取即可。如果不在栈中,那么就搜索,并更新答

2020-06-21 16:01:27 130

原创 luogu P3225 [HNOI2012]矿场搭建

题面传送门感觉这道紫题质量还是可以的。我们先跑一遍TarjanTarjanTarjan求出图的割点,然后根据割点将图割开。对于每个连通块,分类讨论:如果没有接触到割点,那么要设两个点,因为要考虑原来那个塌了的情况。方案数乘上Cn2C^{2}_{n}Cn2​如果只有一个割点,那么为了防止割点崩塌,得设一个,方案数乘上nnn如果有两个以上割点,那么无论如何都能跑回去,所以不用设割点。代码实现:#include<cstdio>#include<cstring>#defin

2020-06-20 20:00:40 116

原创 fxtoi FLYing

很遗憾,被我卡掉了 ---lxl

2020-06-16 18:33:33 102

原创 CF438D The Child and Sequence

题面传送门明显势能线段树。这里证明一下取模的下界。对于一个数xxx,若取模的数y>x2y>\frac{x}{2}y>2x​,那么x%y=x−y<x2x\%y=x-y<\frac{x}{2}x%y=x−y<2x​,若取模的数y<x2y<\frac{x}{2}y<2x​,那么x%y<y<x2x\%y<y<\frac{x}{2}x%y<y<2x​,则一个数至多取模lognlognlogn次就会为111。修改至多会增加

2020-06-13 19:59:27 129

原创 CF920F SUM and REPLACE

题面传送门一眼就是势能线段树的模板题。关于欧拉函数的上界我不会证,这里证一个复杂度下界。对于每一个数xxx,其最大的约数最大是n2\frac{n}{2}2n​,故对于每一个n2<y<x\frac{n}{2}<y<x2n​<y<x都必定不是xxx的约数,所以复杂度下界lognlognlogn,总复杂度nlognnlognnlogn代码实现:#include<cstdio>#define max(a,b) ((a)>(b)?(a):(b))us

2020-06-09 18:38:59 134

原创 luogu P3478 [POI2008]STA-Station

题面传送门明显是换根dpdpdp,转移时讨论一下就好了。代码实现:#include<cstdio>#include<cstring>#define max(a,b) ((a)>(b)?(a):(b))using namespace std;int n,m,k,head,h[1000039],x,y,s[1000039];long long ans,dp[1000039];struct yyy{ int to,z;}f[2000039];inline vo

2020-06-06 21:52:08 99

原创 NOI online R3游记

tgtgtg:开场感觉pjpjpj的第一题出到tgtgtg来了(滚粗flag+1flag+1flag+1)然后用前缀和水水就过了。第二题感觉像是矩乘板子,推了一下确实满足交换律,然后就打了一个矩阵快速幂(滚粗flag+2flag+2flag+2),感觉复杂度O(qn3logn)O(qn^3logn)O(qn3logn)很不可行,于是写了一些常数优化,最后也没卡进1s1s1s。第三题匆匆忙忙打了个爆搜以及部分分就跑路了。pjpjpj:开场第一题sbsbsb题五分钟直接切了,第二题直接爆搜二十分钟切掉,第

2020-06-06 21:49:44 138

空空如也

空空如也

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

TA关注的人

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