自定义博客皮肤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.

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

原创 9.30数据结构模拟赛

大意的后果:290分->40分 小小总结一下: 1.并查集按秩合并不要敲太快,不然不知不觉打上去个路径压缩就GG了。 2.把暴力程序的数组复制到正解程序的数组时一定要检查数组开没开够,毕竟暴力是针对30%的数据。。。 3.map等STL的具体用法要搞清楚。 题解:并查集按秩合并,然后查一下dep即可。#include<cstdio>#include<cstring>#include<i

2017-09-30 14:17:16 331

原创 bzoj 4530(DFS序+线段树合并)

传送门 题解:对每个点建权值线段树(权值即点在DFS序列中的编号),合并的时候直接合并两个点根的线段树,并连一下并查集,查询的时候找到x,y所在树的根f,假设dep[x]>dep[y],那答案就是(size[f]-size[x])*size[x](这一点的解释尽快补上,不过好像不比较也能过,难道是数据水?)。 P.S.在询问时要选深度更深的点的原因: 如果dep[x] < dep[y]并且选择

2017-09-29 21:57:46 271

原创 bzoj 4756(线段树合并)

传送门 题解:显然可以用DFS序+主席树搞定,听说有一种处理子树的方法叫做线段树合并,所以专门写来试一试。建n棵动态开点的权值线段树,在形态树(输入的那个奶牛树)上从下往上合并线段树即可。#include<bits/stdc++.h>using namespace std;const int MAXN=1e5+4;int n,nn,a[MAXN],b[MAXN],ans[MAXN];int

2017-09-29 20:48:51 312

原创 bzoj 2073(状压dp)

传送门 题解:预处理每种状态的重量和代价,最后用可行状态更新即可。 新技能!枚举子集:for (int i=state;i;i=(i-1)&state)#include<bits/stdc++.h>using namespace std;const int MAXN=17;int mw,n,t[17],w[17],f[1<<17],sum[1<<17],cost[1<<17];int m

2017-09-29 20:03:08 353

原创 bzoj 4057(状压dp)

传送门 题解:设f[i](bool)表示能否出现状态i,二进制i的1表示破产,0表示幸存#include<bits/stdc++.h>using namespace std;int n,a[22][22],ans[22],cnt;bool f[1050000];int main() {// freopen("bzoj 4057.in","r",stdin); int kase;

2017-09-29 19:27:33 514

原创 UOJ 261/bzoj 4719(LCA)(NOIP2016)(天天爱跑步)

传送门 对于在st->en路径上的一点x,显然有两种情况: Case1: x在st->LCA上 Case2: x在LCA->en上 对于Case1,显然满足关系式dep[st]-dep[x]=w[x],那么dep[st]=dep[x]+w[x],那么我们只需要找出以x为根的子树中,dep满足条件的即可。 对于Case2要稍微麻烦一些。写出关系式:dep[x]+dep[st]-2*dep[

2017-09-29 17:35:29 243

原创 UOJ 265(状压dp)(NOIP2016)

传送门 NOIP 2016 D2T3 预处理每两只猪所在抛物线能打的猪的集合,然后状压dp即可。 P.S.注意有些猪由于在一条覆盖大量目标的抛物线上,所以可能重复打,于是不能加那句被去掉的”if”。天啊加上一个错误的判断居然只丢了5分。。。 又一年了,想到去年这时候连什么是dp都不知道。。。今年要好好努力了(ง •̀_•́)ง#include<cstdio>#include<cstring

2017-09-29 14:52:39 246

原创 spoj Query on a tree again(树链剖分)

传送门 题解:链剖,然后线段树维护1/0,每一次贪心地往左区间寻找(一条链对应到DFS序上越左深度越浅),最后返回一个下标。复杂度O(n*logn^2) 另外一种线段树写法戳这儿 P.S.用SPOJ评测一定不建议在main函数外写注释。 #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>usin

2017-09-28 22:52:03 361

原创 spoj Query on a tree3/bzoj 1803(DFS序+主席树)

传送门 题解:在DFS序上维护主席树,每次修改权值线段树上一条链,链底时记录一下对应的树上点的编号,然后按主席树第k大的方式查询即可。 P.S.经常迷之CE,就是在bzoj上AC的代码都要CE。。。在本地DEV-C++把警告提示开到最大都没出错。。。 “prog.cpp:8:17: error: too many decimal points in numberApache/2.4.18 (U

2017-09-28 20:55:31 276

原创 spoj Query on a tree(树链剖分)

传送门 题解:树链剖分边权问题,属于本人万年不想碰系列,以前做过不少剖点权的,今天来填填坑。其实两种问题唯一不同的就是:边权问题需要把边权下放到儿子作为点权,然后在链剖向上跳的最后一步稍作修改即可。关于记录一条边以及它对应权值下放的点,本蒟蒻想了一个办法就是用map < pair < int ,int> ,int >,其中pair记录一条边起点终点,最后一个int即这条边权值下放的点编号。经过肉眼

2017-09-28 19:53:16 222

原创 spoj Query on a tree2(LCA)

传送门 题解: 第一问:求出倍增LCA然后dis加减一下即可。 第二问:按照倍增思想往上跳,预判一下如果要跳过LCA就反着跳。 水题,TLE了两次因为倍增预处理不小心写进for循环了,对过样例不造成影响。。。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std

2017-09-28 18:55:25 203

原创 poj 1160(四边形优化dp)

传送门 题解:设dp[j][i]表示前i个村庄建j个邮局的最小花费。先预处理dis[i][j]数组,表示i,j两村庄之间建一个邮局的最小花费(显然建在中位数位置最优)。 不要为什么这道题可以四边形优化。。。因为我也证不来。还有,这题的第三层for(int k……)枚举决策点的方式也是个谜,跟原先四边形优化的式子好像不太一样啊。。。如果哪位大神懂的话请在评论区“指点江山”orz。#include<

2017-09-27 21:04:48 315

原创 四边形优化dp小结

在本蒟蒻开始乱扯之前,先推荐两篇博客,有更详细清晰的讲解,这儿就不说那么多了,毕竟叫“小结”对吧。。。 http://www.cnblogs.com/hadilo/p/5800306.html http://blog.csdn.net/u014800748/article/details/45750737 下面进入正题:(一下所有的把min取成max,把”<”取成”>”也成立) 对于一个状态

2017-09-27 20:09:13 348

原创 hdu 3516(四边形优化dp)

传送门 题解: 画图(画四个点)观察可知通过k点连接i,j两点的代价为x[k+1]-x[i]+y[k]-y[j]。 设dp[i][j]表示将i,j两点相连的最小代价。 可得转移方程:dp[i][j]=min{dp[i][k]+dp[k+1][j]+cost(i,k,j)} 对于一个k,可以证明:(a < b < c < d) cost(a,c)+cost(b,d)<=cost(b,c)+

2017-09-27 19:58:01 308

原创 9.27数据结构练习赛

# 欢迎使用Markdown编辑器写博客 题解:莫队算法模板题! 当然也可以用线段树解决: 离线+ 线段树 将询问R 值排序,考虑维护一个数组A,表示当前询问R 值确定,对于每 一个L 值答案是多少 假设一直R-1 时的数组A’,我们需要求R 的数组A 预处理处每个位置相同值的上一次出现位置prv[i]。 那么对于A 数组中所有prv[r]+1 到r 的位置,都要加v[r],因为这些

2017-09-27 19:10:49 282

原创 51Nod 1022(四边形优化dp)

传送门 题解:由数据范围知复杂度大约为O(n^2),所以考虑四边形优化dp,尽快补上四边形优化的讲解。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN=2004,INF=0x3f3f3f3f;int n,a[MAXN],dp[M

2017-09-26 22:56:28 463

原创 斜率优化dp小结

先推荐一篇博客 下文有小部分修改自:http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 有些DP方程可以转化成DP[i]=f(i,j)+x[i]的形式,其中f[j]与i和j有关。这样的DP方程无法直接使用单调队列进行优化,所以考虑另外一中降低复杂度的方式:斜率优化! 举个例题:hdu 3507 设dp[i]表示到i的

2017-09-26 20:21:11 291

原创 bzoj 1070(区间dp)

传送门 题解: dp[i][j]表示把[i,j]变成回文串的最小代价,显然删除一个不和谐的字符和添加一个是等价的,所以对于每个字符只取删除/添加的最小值。然后记忆化搜索即可,好像也可以直接dp。 P.S.迷之memset要RE。。。以后dp还是尽量用for初始化,免得把一些不易发现的不合法状态弄出问题。。。#include<bits/stdc++.h>using namespace std;

2017-09-26 19:08:05 242

原创 9.26数据结构练习赛

没睡醒的状态下迷迷糊糊地考了rank1,大概是因为做到原题了吧,看来OI还是需要题海战术的(o^∇^o)ノ加帕里的聚会 256MB / 1s ; japari.cpp / c / pas / in / out 【题目描述】 加帕里公园里有n个区域,n-1条道路将它们连接到了一起,形成了一个树的结构。开始时,第i个区域有Ai个friends,但是由于砂之星的作用,有时从x区域到y区域的简单路径上

2017-09-26 18:49:29 421 1

原创 bzoj 2933(区间dp)

传送门 题解:先按照a排序,预处理前缀和,然后预处理区间代价(每次贪心地选中位数然后计算),最后dp一次即可。dp[i][j]表示前i个地区分成j个颜色的最小代价。 吐槽一下,有位大哥做bzoj3065一道时限60秒的题TLE了8次算不算卡评测啊(╯‵□′)╯︵┻━┻#include<bits/stdc++.h>using namespace std;typedef long long ll

2017-09-25 23:07:14 284

原创 bzoj 1996(区间dp)

传送门 题解:设dp[i][j][0/1]表示当前区间[i,j]最后加入a[i]/a[j]构成理想队列的方案数。这样做的可行性:上一次加进来的数一定出现在两端,所以直接和两端比较即可。追问:为什么要比较a[i]#include<bits/stdc++.h>using namespace std;const int MAXN=1002,MOD=19650827;int n,dp[MAXN][M

2017-09-25 21:56:47 351

原创 bzoj 1304(树形dp)

传送门 题解:定义dp[i][0/1]为当前子树在i点染成黑/白色的最少花费。可以这样定义的原因是当前子树的最优方案中,子树的根一定是染了色的。具体注释见代码。#include<bits/stdc++.h>using namespace std;const int MAXN=1e4+2;int head[MAXN],edge=0;struct EDGE { int v,nxt;}

2017-09-25 20:11:29 369

原创 bzoj 1369(树形dp)

传送门 (网上有人)可以证明按题意染色一棵树需要的颜色种数不超过logn。然后O(logn^2)dp即可。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN=1e4+2,INF=0x3f3f3f3f;int head[MAXN],

2017-09-25 18:58:26 390 1

原创 bzoj 4720/Luogu 1850(期望dp)(NOIP 2016)

传送门 NOIP 2016 D1T3 题意:有n个时间段,第i个时间段可以选择在ci教室上课,也可以选择申请换课,有ki概率申请通过,在di上课,另外1−ki的概率留在ci教室。 总共有v个教室,e条路径双向联通教室xi和yi,路径有权值wi。在课间时(相邻两个时间段的间隔中),你要从上一个教室走最短路径到下一个教室。 现在你有m次申请机会,只能提前申请一堆换课(也就是你不能在知道某一次

2017-09-25 17:58:17 207

原创 bzoj 1801(递推)

传送门 题解:状压dp只能得部分分,所以(有大佬)考虑dp[i][j][k]表示前i行有j列放了一个炮,k列放了两个炮。(这样刚好可以表示所有状态orzorz)然后分6种情况递推,最后把前n行所有合法情况加起来即可。(0表示列上没有炮,1表示有1个炮) P.S.一开始死活弄不懂为什么dp[i][j][k]可以从dp[i-1][j+1][k-1]转移(为什么要+1???),后来发现”+1”就是此时

2017-09-25 14:44:11 309 2

原创 9.24NOIP模拟赛

简(simple) 【题目描述】 大道至简.这就是出题人没有写题目背景的原因. 给出2n个数字,将它们划分成n组,每组的得分为这一组中两个数字的较小值. 求最大得分. 【输入格式】 第一行一个整数n表示正整数的数目. 接下来一行2n个空格隔开的整数a1,a2…a2n 【输出格式】 一行一个整数表示最大得分. 【样例输入】 2 1 3 1 2 【样例输出】 3 【数据范围

2017-09-25 11:01:40 492

原创 hdu 4283(区间dp)

传送门 题解:dp[i][j]表示从第i个人到第j个人的最小花费(不考虑前面有多少人) ,拆成两个区间,将i和 前半个区间交换顺序(不换的情况也包括)。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN=102,INF=0x3f3

2017-09-24 17:48:38 252

原创 hdu 1501(dp)

传送门 题解: 如果定义状态dp[0/1][i]表示将c[i]分给a/b串,那么遇到样例2那种情况很可能走进死路(把’t’分给a串)然后无法撤销,所以定义状态dp[i][j]表示a串前i个字母与b串前j个字母能否组成c串前(i+j)个字母。由于要求有序,所以i从i-1转移,j从j-1转移。#include<cstdio>#include<cstring>#include<iostream>

2017-09-24 15:34:37 308

原创 hdu 1978(dp)

传送门 题解:定义dp[i][j]为从(1,1)走到(i,j)的方案数,每次用当前点去更新后面能走到的点。 一道大水题WA了好几次,居然是因为没有memset(dp,0,sizeof(dp)),这大概也是多组数据的一个隐藏坑点#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namesp

2017-09-24 14:23:16 193

原创 hdu 1421(dp)

传送门 题解:设dp[i][j]为选i个物品中有j个配对的最小代价。 转移方程略(too simple),关键是定义状态#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN=2006;int n,m,dp[MAXN][MAXN>>

2017-09-24 13:37:02 141

原创 hdu 5781(期望dp)

传送门 题解:设dp[i][j]为存款范围在[0,i],还能被警告j次,取完钱所花次数的期望。 P.S.dp[k-1][j-1]中k-1的原因:去了k元发现超了,所以存款最多为k-1元 由于Alice会采取最优决策,所以按二分的思想取款最多次数为log2(2000)。#include<cstdio>#include<cstring>#include<iostream>#include

2017-09-24 12:05:04 366

原创 bzoj 1965(快速幂+逆元)

传送门 数论收尾ing(ง •̀_•́)ง/* ans*(2^m)==L (mod n+1) 2 mod n+1 的逆元为 n/2+1(这一步用费马小定理求迷之WA) ans=L*(n/2+1)^m (mod n+1)*/#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>u

2017-09-23 23:03:59 253

原创 bzoj 2751(快速幂+乘法原理)

传送门 没时间写题解了。。。hfu老师要求22点前总结计划,大概就是表示出一般情况的答案(乘法原理),然后有限制/无限制分开计算,最后乘在一起。 转一篇别人的题解:http://www.cnblogs.com/Beckinsale/p/7488874.html#include<bits/stdc++.h>using namespace std;typedef long long ll;co

2017-09-22 21:28:23 334

原创 bzoj 2705(欧拉函数)

传送门 大水题,但是我并没有1A( _ _)ノ|扶墙#include<bits/stdc++.h>using namespace std;typedef long long ll;ll n,ans=0;ll phi(ll n) { ll ret=n,a=n; for (ll i=2;i*i<=n;++i) { if (a%i==0) {

2017-09-22 20:08:44 261

原创 bzoj 1951(Lucas定理+中国剩余定理)

传送门 新技能get:为没有mod的组合数创造mod,然后使用Lucas定理 #include<bits/stdc++.h>using namespace std;typedef long long ll;const ll MOD=999911659;ll p[4]={2,3,4679,35617};ll fac[4][36000],g;ll d[36000],a[36000];in

2017-09-22 19:32:10 234

原创 bzoj 4517(组合数学)

传送门 题解:C(n,m)*d(m), d表示错排,递推公式:d(n)=(n-1)*(d(n-1)+d(n-2)) P.S.注意特判!注意特判!注意特判!!!还有ios::sync_with_stdio(false)慎用,小心RE。。。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MAX

2017-09-22 16:44:19 228

原创 bzoj 2299(裴蜀定理)

传送门 裴蜀定理主要内容(扩展欧几里得的理论基础):若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数 题解: 设(a,b),(a,-b),(b,a),(b,-a)四个向量分别有t1,t2,t3,t4个 x1*a+y1*b=x x2*a+y2*b=y 其中x1=t1+t2,y1=t3+t4,x2=t3-t4,y2=t1-t2 显然x1,y2的奇

2017-09-22 15:34:58 357

原创 bzoj 2242(快速幂+扩展欧几里得+BSGS)

传送门 题解:略,几个模板ho在一起就完了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mop=1e5+4;inline ll mult(ll x,ll y,ll MOD) { x%=MOD,y%=MOD; return ((x*y-(ll)(((long double)

2017-09-22 12:11:41 217

原创 hdu 3930(BSGS+原根+扩展欧几里得)

先介绍一篇关于原根与离散对数的优秀博文:http://blog.csdn.net/smilewsw/article/details/47659793 传送门 题解: 对于X^A = B (mod C) 1.求出B关于C的原根root 2.用BSGS求出满足root^cc = B (mod C)的cc 3.由原根性质,root^x=X,所以原方程转化为求root^(xA) = root^c

2017-09-22 09:40:38 549

原创 bzoj 1856(组合数学)

传送门 题解:答案是C(n+m,m)-C(n+m,m-1)。C(n+m,m)是总方案数(n+m个位置中选m个放0),然后减去不合法的。将题意转化为:从一个矩阵的左下走到右上不能经过某条水平直线的方案数。 如果我们把1看作一个向量(1,1),0看作一个向量(1,-1),那问题就转化成从(0,0)走到(n+m,n-m)不经过直线y=-1的方案数。考虑限制的话,我们看图发现经过y=-1的情况可以看作

2017-09-21 17:21:09 262

空空如也

空空如也

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

TA关注的人

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