自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【hdu】5354 Bipartite Graph【cdq分治+并查集】

【题意】:给你一个图,问删除一个节点后,该图还是不是二分图【题解】:题意很简单,显然数据范围不可能允许我们n方暴力。关于判断二分图我们可以用染色法,也可以使用并查集,染色法每次都需要遍历全图,显然是行不通的,我们这题采用的是cdq分治+并查集,这里的并查集要求不能路径压缩,并且可删除,关于并查集的可删除我们可以每次用一个栈记录新合并之前的节点的状态,还原的时候把栈中储存的信息一个一个拿出来就好

2016-08-13 23:13:42 496

原创 【hdu】5618 Jam's problem again【cdq分治】

【题意】给你n个三元组 让你对每个三元组,找出每个元素都>=改三元组的数量,找出(x1,y1,z1)满足x1>=x,y1>=y,z1>=z 【题解】cdq分治。先对三元组按xyz升序排,x为第一关键字,y为第二关键字,z为第三关键字,然后进行分治,每次分治的时候,将[l,r]中的三元组复制出来,对[l,mid][mid+1,r]进行yz升序的sort,y为第一关键字,z为第二关键字,然后对于每

2016-08-13 13:45:26 462

原创 【hdu】1011 Starship Troopers【树形背包】

【题意】:有一颗树,树的节点编号为1-n,1为根节点,每个节点上会有x个敌人,y个宝藏,现在你从1号节点出发,率领m个友方单位,只有攻占了父节点才能继续攻占子节点,如果你在一个节点的兵力*20>=敌人数,你就可以得到这个节点中的宝藏,并且这些士兵就永久驻扎在这个节点了,并且所有士兵不能走回头路(注意这个条件非常重要,我在这里WA了2次,这个条件就意味着,就算每个节点的敌人数量都是0,也至少需要一个

2016-08-13 03:45:56 369

原创 【hdu】4685 Prince and Princess【二分匹配+tarjan】

题意:有n个王子,m个公主,每个王子有他自己喜欢的公主们,问一个王子可以匹配的公主有哪些,要求一个王子匹配一个公主后,总的可匹配数不能减少,也就是不能让别的王子的本来可以有老婆的,现在没了。题解:题意和poj1904集合一样,只不过那题给出了完美匹配,且王子与公主都是n个,这题又加了限制,是poj1904的加强版,可以先试试那题再来做这题后好理解很多,这是poj1904的题解 http://b

2016-08-06 13:27:49 415

原创 【poj】1904 King's Quest【强连通】

题意:国王有n个王子,王国内有n个妹子,每个王子喜欢一个(些)妹子(们),给出了一个王子与妹子之间的完美匹配.问一个王子可以匹配的妹子有哪些,要求改王子匹配改妹子之后,其他王子仍有妹子可以匹配,仍能够形成完美匹配题解:题目真是非常的具有误导性,十分容易考虑到二分匹配上去,实际上确是强连通.我们考虑转换原问题,,我们从王子向他喜欢的妹子(们)连一条边,对给出的完美匹配,我们对每一对匹配的王子与妹

2016-08-06 02:14:16 836

原创 【hdu】4352 XHXJ's LIS【状压+数位dp】

题意:题目这么长,其实就是找出区间内如果把数字看成一个阿拉伯数字的集合的话,这个集合中最长严格上升子序列的长度为k的个数题解:主要是如何储存之前的状态比较难想,考虑到有0-9十个数字和nlogn的LIS求法,我们可以用状态s表示当前哪些数字是在求LIS的那个数组中的,然后每新加一个数,就更新状态s,这种状态s的更新可以预处理出来,其他的就和普通的数位dp一样了#include#inclu

2016-07-12 10:06:08 439

原创 【hdu】3430 Shuffling【中国剩余定理】

题意:给出n张牌,标号为1-n,然后给出两个序列,序列1表示序列1,2,3,4……,n洗一次牌后到达的,序列2表示目标序列,问初始序列按序列1的洗牌方式洗几次能到达序列2的情况,如果不能到达输出-1题解:在初始序列和序列1的变换中找出1能变到那些牌,这些牌构成一个集合,这些集合中的牌必然是能够相互到达的,然后在序列2中也找出这样一个集合,集合中这些元素的相互顺序是要一样的,这就是判断能否达到,

2016-07-11 13:25:01 1084

原创 【poj】1128 Frame Stacking【拓扑排序+输出字典序】

题意:有一层层火焰图,不同火焰图用不同大写字母表示,一个火焰图是矩形的,给出整张图,问火焰图放的顺序题解:A火焰出现在B火焰的边框上说明A火焰在B火焰的上面,我们可以记录出每个火焰的左上角与右下角的顶点,这样就可以遍历他的边框进行建边然后是按字典序输出所有方案,瞬间懵逼,联想到前两天刚做的一道题,只要逆向建边即可dfs回溯输出#include#include#include

2016-07-06 10:00:05 660

原创 【hdu】1664 different digits【搜索+字符串处理】

题意:找出给出数的倍数中组成数字最少的那个数,如果组成数字一样输出大小最小的那个数题解:刚看到的时候不知所措,根本不知道哪里可以剪枝,也不知道搜索到哪里为止。。。。point1:该题用到了数论的知识:对于任意的整数n,必然存在一个由不多于两个的数来组成的一个倍数。所以先搜1个数的再搜2个数的就好证明:因为 a , aa , aaa…… 取 n+1 个,则由鸽笼原理,必有两个模

2016-07-05 10:16:22 416

原创 【cf】55d beautiful numbers【精妙的数位dp+离散化】

题意:求1-n中,能被所有组成他的非0数整除的数的个数题解:题意很简单,但是考虑到数位dp的状态转移,dfs(pos,pre,status,limit)如果要记录除以他所有数那么势必要用数组来存,但这样一来,很难用dp数组来记录当前状态,这题非常巧妙的采用了lcm的方法,避免了该类操作,2-9的lcm是2520,这样我们只要记录前面数字的lcm和前面数字模2520剩下的数,那么既保证了

2016-07-05 09:58:51 1259

原创 【poj】3687 Labeling Balls【拓扑排序】

题意:有n个小球,重量为1-n,给出一些限制条件,求所给条件下使得重量小的标号尽可能小,即标号从1到n的重量的字典序尽可能小题解:要是重量的字典序尽可能小,也即我们要给标号小的赋值尽量小的重量值,每次我们取当前入度为0的点,并且给他赋值,考虑我们把所有入度为0的点加入优先队列,然后每次取出标号最小的并且给他赋值最小的重量,这样并不能保证字典序最小,比如说1的初始入度非0,这样我们并不一定就

2016-07-04 08:56:58 286

原创 【poj】3660 Cow Contest【floyd传递闭包】

题意:给你一张合法拓扑图中的一些边,问你其中那些节点的rank是可以确定的,比如说给出A>C,B>C两条边,总共有ABC三个节点的话,C的位置是可以确定的,排在第三位,AB无法确定大小,故答案为1题解:之前有想到过一个点的入度出度之和为节点数-1的话,就成立了,但是在计算入度出度的时候,考虑到我传递关系,本来打算记录所有前驱,去重的,但感觉时间和空间复杂度过高,苦思冥想,最后还是百度了

2016-07-02 20:49:57 271

原创 【hdu】2196 Computer【树形dp】

题意:给出一棵树,树上边的长度不同,问树上的每个节点到别的节点的最远距离是多少题解:树形dp的经典应用,一个节点b的最长距离有三种情况,1.来自他的子树2.与他父节点距离最大的节点+他与他父节点的距离第二种情况分为两种3.是与他父节点距离最大的节点在以父节点为根的子树中4.来自以父节点为根的子树之外的树上面3.中如果节点b在这条最长路中的话就不行了,所以我们还要记下父节点的第二

2016-06-29 11:14:47 356

原创 【uva】624 CD【背包记录路径】

题意:    背包+路径记录题解:    用一个vis[i][j]记录容量为j的背包里面有没有用到过i物品,物品是倒着放的,具体实现看代码#include#includeusing namespace std;const int N=10005;int cd[25],dp[N],v[25];bool vis[25][N];int main(){ int i,j

2016-06-29 10:43:50 363

原创 【hdu】1520 Anniversary party【树形dp】

题意:一群人种有上下属关系,构成了一棵树,每个人都有一个价值,直接的上下属不能被加入同一个集合,问一个集合最大能有多少价值题解:赤裸裸的树形dp,这是我系统的开始学树形dp的第一道题,算是领略了一些树形dp的要点dp[i][0]记录不取i节点所能得到的在以i节点为根的子树中所能取得的最大价值,dp[i][1]记录取i节点以i节点为跟所能取得的最大价值遍历i的儿子 dp[i][0

2016-06-28 22:33:47 257

原创 【hdu】2369 Bone Collector II【kth背包】

题意:背包问题,求第k大题解:题意很简单,普通的背包问题,关键是求第k大,我们就把普通的背包新增一维dp[i][j]记录背包容量为i的时候第j大的价值为dp[i][j],对于每一件物品A数组记录取了这件物品之后的前k大价值,B数组记录不取这件物品的前k大价值,然后把AB数组合并去重取前k个记录下来就可以了,这样可以保证答案的正确性#include#includeusing na

2016-06-28 22:23:07 337

原创 【hdu】1885 Key Task【状压+bfs】

题意:走迷宫,问走出迷宫最少需要多少步,其中要想通过一个含有门的格子,需要先经过含有该门对应的钥匙的地方题解:之前做过类似的一道题目,十分相似,不过这次做的时候还是出了点小问题,我vis只开了两位,发现就无法走回头路了,后来多加了一位存钥匙的状态,这样就可以判断重复情况了,以后记住了#include#include#includeusing namespace std;co

2016-06-28 22:11:56 481

原创 【hdu】1226 超级密码【bfs】

题意:找出最小的c进制数,其中c进制数只能由给定的数组成,要求是n的倍数题解:之前觉得广搜范围太大,找不到剪枝,并且c进制数与10进制数之间的转换也是个问题,看了大神们的blog,发现想到方法了原来是道水题1.用一个含string和int的结构体记录当前节点所包含的数字和当前节点包含数字%n的值,这样我们在数字后面加上一位的话只需要将数字*16+就可以了,如果要计算下一个%也很方便

2016-06-28 22:08:49 495

原创 【hdu】2485 Destroying the bus stations【最小割】

题意:起点在1,中点在n的一张图,点与点之间有一条路,每条路经过所需要的时间为1,问最少删去多少个节点使得不能在k时间内从起点走到终点(删去节点的的话所有与这个节点相连的边都失效)题解:跑一边floyd,把所有f[1][i]+f[i][n]1.节点到节点'连一条容量为1的边2.相连节点之间连一条容量为inf的边这样进行最小割之后,答案就是去掉多少个点证明下上述解法的正确

2016-06-28 09:41:49 250

原创 【hdu】3277 Marriage Match III【最大流】

题意:n男n女,女的选择男朋友,每个女的有喜欢的男的和不喜欢的男的,每个女的有朋友,朋友与男朋友满足传递关系,即a和b是朋友,b喜欢c男生,那么a也喜欢c男生,问每次女的都选择不同的男朋友,并且每个女生有k次机会选择自己不喜欢的男生,如果所有女的都选择到了男朋友算一轮游戏,问这个游戏总共可以玩多少轮题解:看出来大概是一个类似婚姻匹配的游戏,然后加上了朋友圈的传递以及选择不喜欢的男生,很

2016-06-27 23:21:09 517

原创 【hdu】4521 小明系列问题——小明序列【LIS变种】

题意:求最长上升子序列,其中子序列中相邻的两个数的下标差要超过k题解:英语不好读题都读不好 之前看成了子序列中相邻的两个数的大小要超过k怎么都做不对后来lower_bound写成了upper_bound记住了最长上升子序列如果要求严格上升的话就是lower_bound 可以相等的话就是upper_bound子序列中相邻的两个数的下标要超过k,要想满足这个条件我们可以按下面的

2016-06-26 23:52:47 909

原创 【hdu】2433 Travel【最短路删边】

题意:给出一个n节点m条边的图,设这个图所有点之间最短路之和为sum,然后输出删除每一条边之后的sum值,图不联通输出inf题解:第一次计算所有图之间最短路之和的时候在spfa算法里面记录used[i][j][k]代表以i节点为起点进行spfa操作的时候最短路中经过路径j,k然后在之后进行删边操作的时候 注意重边每次都把包含有该条边的也即used[i

2016-06-01 22:12:40 1456

原创 【hdu】4228 Flooring Tiles【反素数】

题意:求用最少的单位正方形拼出n个不同的矩形,求所需的单位正方形数题解:我们知道一个数的因子个数为2*n或者2*n-1个的话就能拼出n个不同的矩形,用求反素数的方法,也就是说求最小因子数为2*n或2*n-1的数#include#includeusing namespace std;#define ll __int64int p[16]={2,3,5,7,11,13,17,1

2016-06-01 00:24:28 338

原创 【poj】2481 Cows【线段树单点更新】

题意:有N头牛 每头牛有一个[S,E]值 要求找出所有牛j使得Si Ej - Sj 对每头牛输出这样的牛的个数

2016-05-31 23:25:24 286

原创 【hdu】3231 Box Relations【拓扑排序三维】

题意:空间中存在n个长方体,m个长方体之间的关系 I代表长方体相交 Xab代表a长方形的所有点x坐标小于b的任意一点 YZ同理 要求给出一组满足条件的坐标 否则输出-1题解:一个长方体可以由一个体对角线上的两个端点表示也就是说2个三维坐标来表示 我们可以对三维坐标分解来看 X代表a矩形的x轴坐标小于b矩阵的x轴坐标 我们可以定义a的下表面为x1 上表面为x2 在x1x2建一条边表示x1小于x2

2016-05-31 02:04:59 422

原创 【hdu】3001 Travelling【三进制状压dp】

题意:n个点m条边的图,任意选择起点,要求经过每个点不超过两次,求遍历全图的最小cost题解:普通状压dp2进制压缩,这个题三进制压缩0表示未经过1表示经过一次2表示经过两次,因为三进制不同于二进制,所以预先处理状态在三进制状态下每一位的值,dp[i][j]记录当前状态为i最后一个到达节点为j的最小cost 状态转移方程dp[i+state[k]][k]=min(dp[i][j]+g[j]

2016-05-31 01:48:40 494

原创 .CodeforcesBeta Round #19 D. Points 线段树 单点更新

题意:三个操作均在二维坐标轴上进行 Add(x,y)加入一个点 remove移出一个点 find寻找最小的坐标严格大于当前点的坐标 没有输出-1 x优先级大于y题解:因为是在二维坐标轴上操作所以可以将所有操作按照x轴排序,然后把x轴坐标当成线段树的区间,y区间当做线段树权值,线段树记录当前线段最大y值,这样一来query就和常规线段树不太一样#include#include#inclu

2016-05-31 01:19:53 246

原创 poj 2886 线段树 单点更新

题意:N个小孩围成一圈,玩约瑟夫环,每个小孩有一张卡片上面是数字a,正数代表右手边第a个小孩出队,负数表示左手边,游戏从第k个小孩开始,游戏直到所有小孩出队为止,第p个出队小孩得到f[p]分数,f[p]为p的因子数题解:这里引入反素数的概念不清楚可以看http://blog.csdn.net/ACdreamers/article/details/25049767每次询问只要从第一个出队的运

2016-05-31 01:01:44 282

原创 poj 2828 线段树 单点更新

题意:有N个人排队,每一个人都有一个val来对应,每一个后来人都会插入当前队伍的某一个位置pos后面。要求把队伍最后的状态输出。题解:一看到这种题目如果之前做过类似的题目很容易就可以想到要倒序完成 因为这样每个数插入的位置在当前都是可以确定的,sum记录当前线段的空位数#include#includeusing namespace std;#define lson l,mid,rt<

2016-05-31 00:28:55 266

原创 hdu 4906 状压dp

题意:给出n,k题解:看到k状态转移方程next=(1#include#include#include#include#define ll __int64using namespace std;const ll mod=1e9+7;ll dp[1<<21],v;int main(){ int T,n,k,l,MIN,SIZE,d,i,j,p; scan

2016-05-31 00:03:34 299

原创 hdu 3874 线段树 离线查询

要求一个区间所有数之和 求和时要去重 离线查询 先把所有查询离线 然后按照右端点排序 每次保证加入后一个数的时候线段树中没有和他重复的 如果重复就把前一个删掉 这样由于之前排序过 保证不会漏解#include#include#include#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1using namespace std

2016-05-26 01:21:55 444

原创 hdu 2852 线段树 单点更新

主要是查询的时候 本来时间就比较紧 查询的时候直接暴力二分求答案 超时看了下别人代码 主要是find的时候要直接find速度快了很多#include#include#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const int N=100000;using namespace std;int sum[N<<3],ans

2016-05-26 01:18:54 286

原创 hdu 5045 状压dp

因为所有人做题数量差不能大于1 所以可以把每n道题看成一组 每一组必须由每个人完成一道的方式完成dp[i][j] i代表当前题数 j代表当前队员状态#include#include#includeusing namespace std;double dp[1005][1050],r[11][1005],ans,tmp;int T,n,m,i,j,first,t,k,MAX,kas

2016-05-24 23:36:32 220

原创 hdu 4114 状压dp floyd

dp[s1][s2][i] s1为当前必达景点状态 s2为当前拥有钥匙状态 i为当前到达节点

2016-05-24 23:26:05 334

原创 hdu 3920 状压dp

题意:2n个敌人需要杀死,分布在地图上的不同位置,每次能杀死2个人,代价为本人与敌人1距离+敌人1与敌人2距离思路:状态压缩dp 状态o每位代表一个敌人0未杀死1杀死 直接一维dp枚举#include#include#include#includeusing namespace std;const int inf=0x3f3f3f3f;double dp[1<<20],dist

2016-05-24 22:56:22 315

原创 hdu 5690 多种方法实现

太菜了 比赛的时候下面罗列的方法大致方向都想对了 但都差了一点 没敢写 不够自信第一种方法:找循环节法 注意循环节不一定就从第一个开始#include#include#define ll __int64using namespace std;int vis[10005];int num[10005];int main(){ int T,kase=1,tmp,cnt,i

2016-05-21 22:15:08 878 1

原创 hdu 5381 线段树区间合并

gcd运算的时候 如果之前的保持不变 新加入一个数进行gcd运算 得到的答案只会越来越小这题要我们求[l.r]中所有子区间的gcd值之和 我们就要尽量保存子区间的gcd在合并区间的时候以尽可能快的速度合并我们可以知道gcd的数量是log级别的所以我们可以保存Rg[32],Rn[32],Rc,分别记录的是[i,r](i>=l)的不同gcd值,不同gcd值的数量,有多少种不同的gcd值

2016-05-21 10:06:48 571

原创 hdu 3046 最小割

直接每个点和周围四个点连一条容量为1的边s与狼连容量为inf的边羊与t连容量为inf的边之前以为这样会超时 还是太嫩了。。#include#include#includeusing namespace std;const int MAXN=500000;const int MAXM=500000;const int inf=99999999;struct edge{

2016-05-21 09:45:50 339

原创 hdu 4825 字典树

xor的题目 没怎么接触过主要还是字典树没学好读入询问的时候 询问的这一位是0 那么尽量往1走 反之同理 这样就能尽量使得异或值最小#include#includeusing namespace std;#define ll __int64const int M=55;const int N=M*1e5;struct node{ ll val; int l,r

2016-05-19 23:59:57 265

原创 hdu 2894 欧拉回路

代码很短 但看别人的blog看了很久 才理解第一问的答案毫无疑问是2^n第二问的答案长度肯定是2^n   因为要求前n个必然是0原问题是要求能够表示出0-(2^n-1)的数 每个数只能出现一次 一圈是一个循环 每条边也只能经过一次 就是求一个欧拉回路从u向to1=(u其他解释都在下面了#include#includeusing namespace std;int p,d[

2016-05-19 23:43:13 579

空空如也

空空如也

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

TA关注的人

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