自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

KGV093的博客

Revelations and heartaches, make you realize.

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

原创 树边,前向边,后向边,横叉边

图片来自:http://blog.csdn.net/u014665013/article/details/51351371在图的遍历中,往往设置了一个标记数组vis的bool值来记录顶点是否被访问过。但有些时候需要改变vis值的意义。令vis具有3种值并表示3种不同含义 vis = 0,表示该顶点没没有被访问 vis = 1,表示该顶点已经被访问,但其子孙后代还没被访问完,也就没从该点返回 v

2017-08-31 15:48:17 410

原创 Luogu 1144(SPFA+dp)

传送门 题解:先跑一遍SPFA,然后再dp,如果dis[v]+1==dis[p],则有ans[p]=(ans[p]+ans[v])%MOD 注意:ans[1]初始化为1(1的最短路就是0,有一条),否则ans跑出来全是0……#include<bits/stdc++.h>using namespace std;const int MAXN=1e6+2,MAXM=2e6+2,MOD=1e5+3;

2017-08-30 22:58:58 275

原创 Luogu 1972(主席树)

传送门 题解:用主席树维护区间内不相同的数,将重复的元素建树,进行query( )的时候,用区间长度(r-l+1)相减就是答案。 注意:query( )的写法要注意,不是对称查找!!!#include<bits/stdc++.h>using namespace std;#define lson lc[rt],l,mid#define rson rc[rt],mid+1,rconst in

2017-08-30 21:39:27 301

原创 codeforces 827D(kruskal+倍增+并查集)

传送门 题解:先求出最小生成树,用倍增LCA求出不在最小生成树中的边的答案,同时再用这个答案它去更新最小生成树中的边的答案。为了提高更新这一操作的效率,枚举有序(从小到大)的边集,更新过的用并查集连在一起(由于从小到大,小的最优,下条边一定不会再次更新它们),下一次直接往上跳即可。#include<cstdio>#include<cstring>#include<iostream>#in

2017-08-30 20:03:00 574

原创 Luogu 3387(tarjan+dp)(tarjan+SPFA)

传送门 直接tarjan缩点,然后在DAG上dp一下最长路即可。#pragma comment(linker,"/STACK:1024000000,1024000000")#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define root 1,n,1#define lson l,mid,r

2017-08-29 23:00:52 340

原创 bzoj 1036(树链剖分)

传送门 模板题,代码就作为模板扔这儿。 注意:每次query从main函数传参时传x,y不是tid[x],tid[y]#pragma comment(linker,"/STACK:1024000000,1024000000")#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define roo

2017-08-29 22:59:15 279

原创 NOIP三连测总结

近三天举行了三场考试,好像考得都不咋地,与上一周专题训练相比相差甚远。单就分数来说,基本看不下去。基本就在20名左右徘徊。但是,三天以来,从第一天思维僵化忽略各种情况到今天想到第二题正解(虽然写挂了),个人感觉自己的状态还是在变好,并且收获了一些干货:1.对于输入输出接近longlong的题目,不要因为吝啬一点运算时间而用int,万一什么自己算错了或者有部分数据特殊或不合法,一道轻轻松松大家都能A的

2017-08-27 21:29:37 272

原创 bzoj 1756(线段树)

传送门 题意:单点修改,询问区间最大连续子段和基本就是线段树模板题,每个结点维护四个信息:区间和、左端点向右最大连续和、右端点向左最大连续和、区间最大连续子段和。注意: 1.询问时l可能小于r!!!一定要swap!!! 2.询问时必须通过合并区间来更新答案,所以函数返回类型最好用结点结构体而不是值。为什么要合并左右区间(pushup( ))?因为具有最大连续子段和的区间可能不是线段树的一个结点

2017-08-27 21:11:27 400

原创 Luogu 1040(区间dp)

传送门 (l,mid-1),(mid+1,r)即mid为根的左右子树。 dp[l][r]=max{dp[l][mid-1]*dp[mid+1][r]+point[mid]} dp时再记录最优解选择的根结点即可。 注意:root[i][i]=i。否则输出前序遍历要崩!#include<cstdio>#include<cstring>#include<iostream>#include<a

2017-08-27 18:59:39 279

原创 Luogu 3919(主席树)

传送门 其实就是可持久化线段树,连pushup都不用写,可作为模板使用。#include<bits/stdc++.h>using namespace std;#define lson lc[rt],l,mid#define rson rc[rt],mid+1,rconst int MAXN=1e6+2;int n,m;int tim=0,root[MAXN],lc[MAXN*22],r

2017-08-26 21:32:13 225

原创 Luogu 1351(树形dp)

传送门对于x点,用于它直接相连的点来更新答案(最大值、次大值、权值和)即可,其实根本算不上什么dp。 注意:long long!!!数据范围什么的都是假的,要看答案会不会爆int。。。60分了半天。。。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>using na

2017-08-26 20:23:33 279

原创 Luogu 2822(组合数学)(NOIP2016)

传送门 NOIP 2016 D2T1(组合数) 先预处理组合数: C(i,j)=C(i-1,j)+C(i-1,j-1) 再dp预处理二维每一行的前缀和,最后每组数据统计答案(O(n))即可#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const i

2017-08-25 21:28:06 235

原创 Luogu 1313(组合数学)(NOIP2011)

传送门 NOIP 2011 D2T1(快速幂,组合数,费马小定理,逆元) 题解就在代码之前,发现第一行所述性质就很容易搞定了。/* 在多项式(by+ax)^k中,某一项(x^n)*(y^m)中m=k-n恒成立 ans=C(k,n)*(a^n)*(b^(k-n))*/#include<cstdio>#include<cstring>#include<iostream>#i

2017-08-25 20:59:14 277

原创 Luogu 1156(dp)

传送门 定义dp[i][j]为用前i个垃圾达到j的高度能获得的最大血量 则转移方程分两种情况写(吃/使用): 吃:dp[i][j]=max(dp[i][j],dp[i-1][j]-(a[i].x-a[i-1].x)+a[i].t); 用:dp[i][j]=max(dp[i][j],dp[i-1][j-a[i].h]-(a[i].x-a[i-1].x)); 垃圾要先按出现时间x从小到大排序#

2017-08-25 20:24:26 225

原创 Luogu 1273(树形dp)(背包dp)

传送门 直接算用户数不好定义状态,于是考虑将收益最大化,收益最大化就能服务更多用户,所以定义dp[p][i]:p点选i个用户的最大收益 然后树形dp即可: dp[p][i]=max{dp[v][j]+dp[p][i-j]-cost[v]};#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>usin

2017-08-25 19:11:09 325

原创 Luogu 2330(kruskal)

传送门 一看是省选题心态就变了,以为会有很多复杂的情况。其实条件2就是搞笑的。。。肯定是连成一棵树时边最少,即n-1。最后跑一个裸的kruskal或者prim就行了。#include<bits/stdc++.h>using namespace std;const int MAXN=302,MAXM=5e4+2;int n,m,cnt=0;struct EDGE { int u,v,

2017-08-25 17:05:12 221

原创 树状数组区间操作模板

推荐一篇博客: http://m.blog.csdn.net/blackjack_/article/details/74997479 推导过程在代码之前,模板题是Luogu 3368或者codevs线段树练习3/* pre_sum(n)=a[1]+a[2]+...+a[n] =c[1]+(c[1]+c[2])+...+(c[1]+c[2]+...+c[n])

2017-08-24 21:32:25 221

原创 Luogu 3368(树状数组)

传送门 树状数组区间修改单点查询(也可以套区间查询)模板题。/* pre_sum(n)=a[1]+a[2]+...+a[n] =c[1]+(c[1]+c[2])+...+(c[1]+c[2]+...+c[n]) =n*(c[1]+c[2]+...+c[n])-(0*c[1]+1*c[2]+...+(n-1)*c[n]) 令d[i]=(

2017-08-24 21:30:36 216

原创 Luogu 2024(带权并查集)

传送门 题解1: 在维护并查集同时,维护一个关系域!(好像就是传说中的带权并查集?!) rel[x]表示点x与x所在子树的根的关系,0是同类,1是被吃,2是吃。利用矢量思想,将关系域看成一个x指向root[x]的矢量(太精妙了可惜不是自己想出来的。。。),在合并和判断时可以直接加减。 注意:传参时type-1是为了方便判断(x,y)同类。但是要注意,合并(x,y)时有向的,传参-1的话矢量x

2017-08-24 20:29:37 368

原创 Luogu 2661(tarjan)

传送门 可以用预处理后dfs搜索最小环来做,反正本蒟蒻用tarjan求最小强连通分量水过了,一开始感觉这样并不太严谨,因为最小的SCC不一定是最小环吧(最小环是最小的SCC的子集)。。。但是–几分钟后发现,对于所有点出度只有1的图来说,最小环好像一定是一个SCC,一定可以用tarjan搜出来! 不过,这个办法对于一般的有向图慎用!!!#include<bits/stdc++.h>using n

2017-08-23 22:37:04 239

原创 暑期第二阶段集训总结(附数论总结和计算几何总结)

先说一说数论的学习情况。这一方面的内容自己在6月份大部队到沈阳集训时,抽空专攻过,现在看来没有白费。除了原根、离散对数还不能灵活运用,FFT还不会写以外,其他的知识基本已经熟练掌握。中国剩余定理用来合并方程的用途居然是我自己发现的,此外于神之怒这样的题现在也会做了。所以这方面的结果还是比较令人满意的。 然后谈一谈计算几何。这个东西以前只是看过,没有写过代码。经过三~四天的专题学习,还是有了一定的认

2017-08-23 22:29:14 243

原创 Luogu 1387(dp)

传送门 我也不知道它为什么是dp。。。显然01矩阵中全为1的正方形有一个性质,那就是权值和为边长平方。那乱搞一下不就行了吗。。。 注意:ans初值赋为1。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN=102;int n,m

2017-08-23 15:15:15 289

原创 Luogu 1880(区间dp)

传送门 环形问题一般处理方法:把原数组复制一份到自己的尾部,然后按线性处理 此题就是普通石子合并的环形版,dp方程都一样。 中间有一步可以优化:当i,j两指针的间距大于n时可以continue,因为这样的范围是不合法的,不会影响答案。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using n

2017-08-23 14:56:16 274

原创 Luogu 1282(dp)

传送门 f[i][j]表示第i次操作后上下差值j需要的最少步数。 进行dp之前预处理出能到达的最大权值(上下差),在这个范围内暴力dp即可,时间复杂度O(n^2*5)(5是每一步上下最大差值绝对值) P.S.想不到这样的标签为”省选-“的题我居然自己A了而且代码这么短,感觉还是挺牛逼的,不过标签上的难度系数略偏高#include<cstdio>#include<cstring>#inclu

2017-08-22 18:01:38 299

原创 Luogu 1280(dp)

传送门一看就知道是dp,就是没想出方程。 对于这种前面决策会影响后面的dp题,可以考虑倒推法。 如果第i分钟没有工作需要开始,则f[i]=f[i+1]+1 否则f[i]=max{f[i+t[j]]} 边界f[n+1]赋为0,如果第n分钟有工作需要开始,则n+t[j]肯定会超过n,所以保险起见f[ ]数组要开大一点。(P.S.不过好像没有这样的数据,默认所有工作会在不超过n时结束)/*

2017-08-22 16:03:53 250

原创 bzoj 2820(Mobius)

传送门 一道没有真正意义上进行反演的“反演” 题。 #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;const int MAXN=1e7+2;bool vis[MAXN];in

2017-08-21 11:31:51 242

原创 codevs 1250(矩阵快速幂)

传送门 求斐波那契数列,矩阵快速幂模板题。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;ll n,MOD;struct matrix { ll x[2][2];

2017-08-20 22:50:23 174

原创 codevs 1258(区间dp)

传送门 题解: 记录一个区间外其它路灯的功率power[i][j],设l[i][j],r[i][j]分别表示由上一个区间走到当前区间左/右的代价。 可得转移方程(代码之前):/* l[i][j]=min(l[i+1][j]+power[i+1][j]*(d[i+1]-d[i]),r[i+1][j]+power[i+1][j]*(d[j]-d[i]))); r[i][j]=mi

2017-08-20 19:46:46 239

原创 poj 2187(旋转卡壳)

传送门 模板题,求凸包,用旋转卡壳求出最远点对。 因为把int弄成double,WA了好几次,差点对idy大神给的模板失去信心。。。不过事实证明idy的写法没问题,orz!#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<cmath>using

2017-08-20 19:09:01 372

原创 hdu 1724(Simpson积分)

传送门 模板题。。。 注意最后答案乘以2,因为阴影部分由上下两部分共同组成 公式: 图片来自:http://blog.csdn.net/linraise/article/details/18624685#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>usin

2017-08-20 16:47:33 308

原创 莫比乌斯进阶:bzoj 4407 于神之怒加强版(Mobius)

传送门 那两对很高的括号也是向下取整,代码中g(x)就是推到过程中的f(x)函数 P.S.现在才真正理解到原创的辛苦orz#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=5e6+2;const ll MOD=1e9+7;ll f[maxn],g[maxn],prime[ma

2017-08-20 14:08:27 357

原创 计算几何基础

百度文库一位叫LLY的大佬的课件 绝对良心的作品,其中介绍的什么环绕法判断点与多边形关系直接让本蒟蒻看呆了orz。

2017-08-18 21:34:00 217

原创 hdu 1402(FFT)

数学基础不够QAQ,留着坑以后有水平了再来做。 *以下代码转自kuangbin的博客 传送门#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <math.h>using namespace std;const double PI = acos(-1.0);//复数结

2017-08-18 21:09:38 176

原创 bzoj 1079(记忆化搜索)

传送门 题意:略这个状态定义简直让人orzorzorz。 dp[a][b][c][d][e][last]表示能涂1个的还有a种,能涂2个还有b种……能涂5个的还有e种,上一次选的是能涂last个的,进行记忆化搜索即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll MOD=1e9+7;ll

2017-08-15 22:36:56 267

原创 bzoj 2330(差分约束)

传送门 题意:略 差分约束后SPFA求最长路,注意判环和输入时特殊不合法情况(某人拿的糖果不能多于自己)P.S.竞赛生两周的暑假结束前最后做点题压压惊╮(╯▽╰)╭ #include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5+2;int n,m;int dis[maxn],in[m

2017-08-15 21:35:35 277

原创 hdu 1392(凸包)

传送门 题意:几乎是模板题,求凸包的周长用Graham扫描法解决(还有一个叫jarvis步行法,目测也差不多)。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int maxn=102;struct NODE {

2017-08-15 15:49:58 231

原创 bzoj 2882(最小表示法)

传送门 问题:将原串复制一次接到尾部,找出构成的新串中长度为原串长度且字典序最小的串并输出。 自己也讲不清楚,只是意会。。。转一篇讲解。 O(n)求字符串最小表示法 P.S.此题还可以用后缀自动机解决,然而本蒟蒻并不会写orz。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using nam

2017-08-14 15:54:21 472

原创 CDQZ Challenge 21

说在前面:“CDQZ”系列题目数据绝对良心(良苦用心233),提交网址如有需要请私信本蒟蒻。 1021:Challenge 21 查看 提交 统计 提问 总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 256000kB 描述 一颗n(n<=2*10^5)个节点的树,初始时只有一号节点是关键点,支持两种m(m<=10^5)个操作,1、将一个点x设为关键点,

2017-08-13 22:31:06 211

原创 CDQZ Challenge 13

说在前面:“CDQZ”系列题目数据绝对良心(良苦用心233),提交网址如有需要请私信本蒟蒻。 1013:Challenge 13 查看 提交 统计 提问 总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 262144kB 描述 给一个长为N的数列,有M次操作,操作仅有一种(每个位置刚开始都分别属于单独的一个集合):合并两个位置所属的集合,并求出两集合间形成的逆序

2017-08-13 16:49:24 384

原创 CDQZ Challenge 19

说在前面:“CDQZ”系列题目数据绝对良心(良苦用心233),提交网址如有需要请私信本蒟蒻。 1019:Challenge 19 查看 提交 统计 提问 总时间限制: 70000ms 单个测试点时间限制: 5000ms 内存限制: 126000kB 描述 给你一个长为n序列a,找a中长度为k的子序列b,使得b的字典序尽可能大。 1<=ai<=1000000000 n<=1500000

2017-08-12 17:02:43 277

空空如也

空空如也

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

TA关注的人

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