自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sky

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

原创 POJ 1065 贪心 最少的上升子序列个数

题意:有很多木板待加工,每个木板有长度和宽度。加工一块木板是需要代价的,代价为1,但如果加工的这块木板的长度和宽度都大于上一块的话,代价为0,给你所有木板的长和宽,问最小代价是多少。这道题说是贪心,于是贪心就能水过。能AC的思路就是,先排序,双关键字,以其中一个为第一关键字排序;然后对于第二关键字组成的序列,求它的最少的上升子序列的个数,因为每个上升子序列对应花费1。最后求出的个数就是

2015-08-29 20:02:26 1832

原创 BZOJ 2657 (ZJOI 2012 旅游) 求树上最长链(树的直径) MAP建树+BFS/DFS

这道题是挺简单,求树上一条最长的路径(后来才知道这叫树的直径),而麻烦的是如何建树,这是这道题略恶心的地方。数据的给出方式是每个节点给3个值(1~n),如果两个节点间有两个值相同,那么这两个点就是有一条边相连。题目中的描述什么凸多边形,三角形的顶点什么的一开始看确实被吓到了,其实就是两个三角形如果有公共边,那么这三角形代表的节点之间就有一条边,三角形的三个顶点就是前面所说的三个值。又因

2015-08-29 17:38:38 1156

原创 BZOJ 3721 贪心

贪心可过,先把序列从大到小排序,求出前缀和pre[i],在对于每个数,求出它前面和后面的第一个奇数和偶数。对于每个询问k,如果pre[k]是奇数就直接输出,否则就拿去pre[k]中最小的奇数再添一个k+1到n中最大的偶数,或者拿去最小的偶数添一个奇数,这两种情况取max输出就是答案。而无法拿去或添加就对应无解的情况。注意,根据数据范围推得需要用long long。#include #in

2015-08-29 15:34:02 372

原创 POJ 1125 裸最短路 Floyd

题意:第一行输入一个数n,表示有n个节点,之后的n行,第i+1行第一个数表示i节点的子节点个数,接着i对数,每对数a,b表示i到a有一条长度为b的边。输入直到n==0结束。让你选择一个点,目的是让这个点散播消息,使得这个点能以最快的速度把消息散播到其他所有点。输出格式为这个点以及散播时间。注意:有可能图不连通,对应无解情况;散播时间就是散播到最后一个点的时间,就是距离起始点最远的一个点。当

2015-08-28 20:41:28 448

原创 COGS 992 宝物筛选 裸多重背包

为什么要把一道裸题写到这里呢,是为了提醒自己这题没有一遍A掉。多重背包可以称为0-1背包的升级版,因为一个物品有很多个,最容易想到的做法是再枚举一下每个物品选多少个,或者把每个物品都展开。当然我们有更优一点的做法:二进制拆分(弱渣目前只会二进制拆分写多重背包)。把每个物品的很多个按二进制的表示拆分,拆分后打包。比如:有A物品13个,按照1,2,4,6个打包,于是原来的13个

2015-08-28 14:15:59 463

原创 POJ 3594 带限制的最短路 枚举+SPFA

题意:给出一个有向图,通过每条边花费的时间wi以及每条边的通行时间[bi,ei],问起点到终点路上花费时间(到达时间-出发时间,时间默认最开始是0)最短是多少。其实就是一个加了限制条件的最短路,SPFA可以做到,其实SPFA是可以加很多扩展内容。但是注意,由于有通行时间的存在,中途有可能需要等待,而答案要求是到达时间减去出发时间,所以这个等待要尽量放在开始之前,就是尽量晚出发。然而我们并不

2015-08-27 21:55:46 611

原创 CODEVS 1021 玛丽卡 最短路模板题

这道题就是一个最短路模板题,SPFA,Dijkstra都可以过。思路:先求出n到1的最短路,记录路径,之后分别把路径上的每一条边删去再求最短路,对这些之后求出最短路取max就是答案了。思路想明白了就好说,一开始我想的是依次删除所有的边,求最短路取max,这么做总是有几个点会T,之后改成Dijkstra,还是T,弱渣的我丝毫没有想到是思路错了TAT。#include #incl

2015-08-27 18:06:46 859

原创 图论:最短路问题 Floyd Dijkstra SPFA算法

昨天的模拟赛中有一道用到最短路算法的题,自己竟然写T了,所以今天来温习一下三个最短路算法,把模板写一写。 首先说明,这三个算法都是无向图有向图皆适用的。Floyd算法: 三个里面最好写的算法,算法原理是通过枚举中间点k,不断对两点之间的最短路长度进行松弛。d[i][j]表示i到j之间的最短路长度,d[i][j] = min{d[i][k] + d[k][j] | k ∈

2015-08-27 15:32:25 1604

原创 欧拉路径问题 (附POJ 1041 POJ 2337)

前几天的一次模拟赛中出了一道欧拉路径求方案的题,输出需要字典序,很自然地挂掉了,然后就好好地又学习了一下欧拉路径的相关问题。欧拉路径就是由著名的七桥问题引出的。欧拉路径是指不重复地经过一个连通图的每一条边从起点到达终点的路径。欧拉回路是最终回到了起点,这样的一条回路。(注意:欧拉路径和欧拉回路是不一样的,名称可能不一样的人叫法不同,但它们是有性质上的不同的,而且不会同时存在于同一个图中。)先来说说欧

2015-08-26 19:02:51 743

原创 POJ 3522 生成树(kruskal)

这道题也是今天模拟赛的一道题,竟在poj上找到了,虽然有一丝差别。 题意:给一个图,求所有生成树中,最大边和最小边差值的最小值。 多组输入,可能会有不连通的情况,就是一丝差别。。。/* 感觉自己也是NC,最开始的做法竟然是二分,判定答案mid是否可行的方法就是以beg为第一条边(最小或最大皆可,这篇博客里是以最小为例,就是说kruskal跑的是最小生成树),(1<=beg<=m-n+2)生成所

2015-08-24 21:05:01 347

原创 Loongint的旅行安排 基础的乱搞,哈希或二分

今天第二次模拟赛,题目仍然是很基础的,比如这道。写这道题主要练习了一下哈希最基础的应用:模大质数。(当然这道题可以不用哈希来写) 题目链接:http://oi.nks.edu.cn/showproblem?problem_id=1982这道题如果暴力枚举是O(n^3)的,而如果我们想办法把它变成O(n^2)即可。 思路就是:我们可以维护每两个数的和,O(n^2)做到;之后再枚举第三个数j和答案i

2015-08-24 19:25:33 450

原创 POJ 1011 (poj 2362强化版) 搜索

题意:2362中是给很多小木棍,问是否可以组合成一个正方形,这道题是给很多小木棍,首先它满足肯定可以组成一个正多边形,让你求这个正多边形边最多时的边长,就是最小边长。强化版的2362,其实只要比我写的2362多加一个优化就可以过了,当然这个优化也可以用到2362中,这样能体验到飞一般的速度。虽然只是多加一个优化,这个优化很难想,我是看了众神犇的博客才搞懂这个优化的。2362中的那些优化在这里就不强调

2015-08-21 16:50:06 372 1

原创 POJ 2362 搜索

一开始是想做1011的,搜题意的时候发现这道题可以说是1011的简化版,于是先写的这道题,才发现自己在最基础的搜索上有很多问题。 搜索首先要有最基本的框架,之后才能考虑剪枝,最基本的框架可能不同的人会不一样,所以针对的优化方案也会不同。 这道题我的基本搜索思路是:bool s(int edge, int sum){ if(sum == side) edge++, sum = 0;

2015-08-21 15:33:42 673

原创 POJ 2479 (后附 POJ 2593) DP

这O(n)的算法我不知道能不能称之为DP,一提DP我印象中的复杂度就是O(nlogn)以上的,多数是O(n^2),啊这只是个玩笑式的开场白而已。题意很明了,单是看图就可以看懂:给出一个序列,求两段不相交的连续子序列的和的最大值。一看就是区间相关的DP,一看还是求连续子序列的和,就应该想到前缀和,后缀和什么的。一开始那一瞬间我的思路是f[i][j]表示以i结尾和以j开头的两个序列的和,不过看了数据范围

2015-08-21 10:02:58 267

原创 POJ 2528 线段树+离散化(水水的线段树+略复杂的离散化)

题意:有一条数轴[1,1QW],给定m(最大1W)个区间,相当于给每个区间染色,每一次都是使用的不同的颜色,问最后能在整个数轴上看到多少颜色。 INPUT:第一行数据组数,每组数据第一行m表示有m个区间,之后的m行每行两个数,表示区间。大家都说这是一道线段树的入门题,水题,却卡了我很长时间。 我一开始还在思考,这题要在线段树节点中附加多少信息啊,一开始思考各种天花乱坠,代码也因为附加信息的增加越

2015-08-20 20:43:07 557 2

原创 POJ 2352 树状数组(线段树)

题意:给出n个点的坐标(n<=15000),坐标范围为[1,32000],最后让你输出ans[i],表示有ans[i]个点左下方有i个点。注意:题目输入是按照y坐标从小到大输入的。 y坐标按照从小到大输入,所以可以只用一维的树状数组,只需要记录横坐标上1到x有多少个点即可。需要离散化,一开始写的没有离散化的T掉了。 代码:#include <cstdio>#include <algorithm

2015-08-20 11:17:34 227

原创 COGS 526 又是一道模板题——左偏树

这不刚刚学会写左偏树嘛,COGS上正好有个左偏树的分类,本来想做第一道,USACO Jan09的安全路径,可是那道题谜一样的题目描述吓到我了,于是就看了下面那一道,就是这道题。相当于又粘了一下模板。 只需要在结构体中加上一个fa,方便给出节点找出树根,再用并查集判断两只猴子是否在一个堆中(就是已经是朋友的都在一个大根堆中,最开始有n个大根堆)就可以。我没仔细想是否可以直接用并查集的树根表示堆的树根

2015-08-18 17:00:39 910

原创 BZOJ 2809 (APIO 2012) 左偏树

dfs枚举每个人做领导者,以它的子树写大根堆,如果花费之和大于预算就删除堆顶,dfs返回堆顶,回溯时进行合并。继续判断花费之和是否大于预算。每次枚举都会有被枚举的人的领导能力,和堆的大小,乘起来就可以作为一个ans,在所有的ans取max。

2015-08-18 15:01:55 525

原创 数据结构:可合并堆——左偏树

刚刚又看了一遍左偏树的内容,为了加深理解,自己也写一篇,夹杂着许许多多的借鉴。左偏树是可合并的二叉堆,首先满足所有的堆的性质,其外,它还可以合并。左偏树的树节点需要保存的信息有:               1.左右子树节点编号               2.此节点到有空子结点的结点的最短距离len               3.自身权值首先解释一下什么是有空子节点的节

2015-08-17 21:25:06 5490 1

原创 USACO Jan08 (COGS 174) 架设电话线 二分答案,缩点,BFS判断可行性

这道题让我好好地加深了一下对二分的细节性处理,等会再做反思,先说一下这道题的思路。 先将题意转化一下,最多K条边免费,路径上的最大值为花费,令这个花费最小,K次免费机会当然是尽量用完啦(用不完的时候答案就是0嘛),总结来说就是求1到n的所有路径中,第K+1大的边权的最小值,若有路径上的边数不超过K,答案即0,若没有路径,答案即-1。 看到数据范围只有1000,就可以联想到这道题不会很简单,稍微复

2015-08-17 09:40:24 531

原创 NOIP 2010 导弹拦截 排序+贪心

这道题一开始想到了贪心,不过直接贪心肯定不对,想到了先排序。最初的思路是:把所有导弹按照到两个拦截系统较近的距离从大到小排序,之后循环一下,仍然是从两个距离较小的入手,只要令r1或r2满足那个较小的就可以。但这样就华丽丽地挂了3个点,还不明白为什么。看了网友的题解想了好长好长一段时间,才略微地理解了一些。 同样是排序加贪心,不过仅仅按照到第一个拦截系统的距离从大到小排序,之后循环i,答案记录的是i

2015-08-16 16:22:09 2102

原创 CODEVS 1003 并查集缩点+最小生成树

这道题思路很明显,很容易就能看出来是最小生成树(其实题目君也说了输出顺序要用prim算法里的访问顺序,但,这是个槽点,必须吐槽)。不过因为已经有了一些边,不能让它们影响到求最小生成树的过程,所以要把它们构成的每个连通分量缩成一个点,这样要用到并查集。 具体做法是如果遇到road[i][j] == 0,那么就把i,j并到一颗树中。最后统计有多少棵树,就是有多少个点,减一就是m的值。 之后呢,就是要

2015-08-16 10:47:21 828

原创 BZOJ 1150 二叉堆(优先队列) + 贪心

!!! 先打几个感叹号表示一下WA了一上午的愤慨。 总结一下题意,就是一条数轴上有n个点,要求选出k对点,求这k对点的距离和的最小值是多少。 首先可以证明我们不能嵌套着选,比如依次有1,2,3,4,四个点,选(1,2)(3,4)必然优于选(2,3)(1,4),所以就是选相邻的点,那么我们就把点与点之间的距离看成线段,或者一个值,题目就变成了从n-1个数中选出k个使得和最小,这样可以想到贪心,不

2015-08-15 15:24:45 1140

原创 DP经典问题:多米诺骨牌(TYVJ 2199, COGS 1205)

这道题算是一个经典的DP问题,它可以用背包来写,因为我们知道数据范围是1000,而且,多米诺骨牌的点数是1到6,所以上下之差最多是5000,所以写个背包复杂度上限是O(1k*5k)。 状态f[i][j]表示前i个数,总和达到j时翻的最小牌数。决策同背包,只有两种:翻与不翻,所以方程就是f[i][j] = min(f[i-1][j-a[i]],  f[i-1][j+a[i]] + 1), a[i]表

2015-08-14 21:45:56 2943

原创 POJ 3784 二叉堆

堆有手写的,有STL自带的,我比较图省事,STL的已经满足这道题的需要,就直接用了。 这道题的思路是用2个堆,一个大根堆,一个小根堆, 我的处理方式是,每次读入一个数,只加入到一个堆里,以小根堆为例。 每次输出也是输出一个堆的堆顶元素,以大根堆为例,这样就要求维护小根堆堆顶大于大根堆堆顶,小根堆元素个数不得大于大根堆,只需要维护这两个性质就可以解决问题。 不过这道题十分的坑人啊,尤其是坑英文

2015-08-13 07:37:42 934

原创 COGS 1441 NOIP 2013 花匠

看到这道题的第一眼,想的是DP,结果果断就会T掉,因为想的状态是F[i][j] (j = 1 / 0)表示第i个数留下做第奇数/偶数个数时,i~n最多能留下的数的个数,这样是O(n^2)的。之后就瞄到了题目讨论区里,写到什么单调队列秒过什么的。单调队列不就是线性的算法么。就拼命的想这道题与单调队列的关系。想到这个序列单调性的变化次数与答案是有关的,画成折线图就是拐点的数量。于是就用单调队列

2015-08-12 20:49:42 376

原创 POJ 2796

这道题同POJ 2559,粘代码稍微修改即可。不过同样是WA掉好多次的经历。虽然说所有数都是非负的,但不妨碍它有 1 0 这样的数据,所以要么ans的初值是负数,要么把更新答案的条件加个等于。一开始图省事,也是习惯性的都没加。WA了好多次。之后气急败坏,把最后一步计算过程拆开,申请了新变量,使之开起来跟清晰,没想到一个顺手写成了int,继续WA。但后来改成了long long后

2015-08-12 15:36:09 509

原创 POJ 2559 单调栈模板题

其实这种模板题本来不想写到博客里的,但由于自己(又!)因为细节wa掉2次,所以把这种水题写到这里警示自己。估计也就我一人会看。单调栈。我们要遍历每个矩形,每个不能再扩大的矩形,这样我们可以通过求出每个单位宽度的矩形条左边第一个比他低的l[i],和右边的r[i]。那么ans = max(h[i] * (r[i] - l[i] - 1));求l[], r[]这个用单调栈就可以解决。

2015-08-12 08:24:39 561

原创 COGS 352 数字游戏

这是一道很基础很基础的单调队列的题,嗯很适合我来写。这道题其实和单调队列裸题——滑动窗口(详见刘汝佳白书)是一样的,只要稍微改一下思考的方向。一开始可以这么想,先预处理出前缀和,在前缀和数组pre[]上做文章。对于每个i > s,即求出以每个i结尾的最优区间,再取最优即可。所以就落到了求每个以i(i >= s)结尾的最优区间,我们有前缀和,所以就是求出前面某一段的最小值即可(其实不

2015-08-11 15:34:54 558

原创 BZOJ 4195 -- NOI(P?) 2015 程序自动分析

这道NOI的题看起来很水,我这不到NOIP的水平的人都能A掉。但毕竟水平洼,交到第4次才A,原因是,map的操作掌握的不熟练。这道题用我学长的话来说就是并查集乱搞,用某大大大神犇的话说就是用并查集瞎**乱搞。对,这道NOI的题,只需要一个并查集就可以。不过一开始看到i,j的范围10亿还给吓到了,数组开不了这么大,不过又有n的范围是10万,也就是说最多有20万个数,还数上了相同的。

2015-08-10 08:20:35 641

原创 第一篇博客 :水题试练

第一次写博客,所以搞一道水题看看效果怎么样; cogs 85 画展这题,其实我是乱搞的,跟队列沾点边。#include int n, m, a, b, a2, b2, ins, s[1000005], u[1000005];int main(){ freopen("exhibit.in","r",stdin); freopen("exhibit.out","w",stdout);

2015-08-07 20:09:06 286

空空如也

空空如也

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

TA关注的人

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