会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
江屿
博客园
首页
新随笔
联系
管理
订阅
05 2017 档案
Vijos1512 SuperBrother打鼹鼠
摘要:SuperBrother打鼹鼠 Vijos链接 题目描述: 在一个矩阵中,有三种操作: 1.后面跟着3个数x,y,k,表示在点(x,y)处新出现了k只鼹鼠。 2.后面跟着4个数x1,y1,x2,y2,表示询问矩形(x1,y1)-(x2,y2)内的鼹鼠数量。 3.表示结束。 思路: 一个树状数组就可以
阅读全文
posted @
2017-05-17 20:20
江屿
阅读(224)
评论(0)
推荐(0)
P2564 生日礼物
摘要:生日礼物 洛谷链接 题目描述: 在一段彩带上有不同颜色的彩珠,求出包含所有颜色彩珠的最短彩带长度。 思路: 我们可以把按彩珠的位置把所有彩珠排一下序,然后从1开始遍历这些彩珠,并记录出现过的颜色数目,知道该数目等于颜色总数,就开始模拟队列的先进先出,不断更新答案。 代码: 1 #include<cs
阅读全文
posted @
2017-05-17 14:59
江屿
阅读(190)
评论(0)
推荐(0)
P1886 滑动窗口
摘要:滑动窗口 洛谷链接 题目描述: 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口。现在这个窗口从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 思路: 直接单调队列搞上,但需要两个单调队列,一个存最小值,一个存最大值,还要有数组来保存它的下标,以计算这个
阅读全文
posted @
2017-05-17 09:31
江屿
阅读(336)
评论(1)
推荐(1)
P1540 机器翻译
摘要:机器翻译 洛谷链接 题目描述: 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件
阅读全文
posted @
2017-05-16 16:30
江屿
阅读(266)
评论(0)
推荐(0)
TYVj1939 玉蟾宫
摘要:玉蟾宫 tyvj链接 题目描述: 在一个01(RF)中,找出一个只包含1(F)的最大矩阵,求出该矩阵的面积。 思路: 题目的数据范围是一千,所以n^3就会爆炸,所以我们考虑n^2的做法。 我们可以用一个二维数组来记录在该点的上面有多少个F(高度),然后求出该点左边和右边第一个低于该点的点,用两点之差
阅读全文
posted @
2017-05-16 15:35
江屿
阅读(171)
评论(0)
推荐(0)
P1988 最大数
摘要:最大数 08年江苏的一道省选题。 题目描述: 用两种操作维护一个数列: 1、 查询:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。 2、 插入:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。
阅读全文
posted @
2017-05-16 10:35
江屿
阅读(246)
评论(0)
推荐(0)
二分图匹配
摘要:二分图匹配 之前写过二分图匹配的博客,但就是感觉看了那篇博客也无法真正懂得二分图匹配,所以就再写一篇了。 先普及一下概念: 二分图:可以被分为两个子集且保证每个子集中的元素不直接相连的图。 交替路:从一个未匹配点出发,依次经过未匹配边,匹配边,未匹配边......形成的路径叫做交替路。 增广路:从一
阅读全文
posted @
2017-05-15 10:34
江屿
阅读(302)
评论(1)
推荐(0)
二分图的判断——染色法
摘要:染色法判断二分图 二分图: 一个无向图,使得顶点集V可以分割为两个互不相交的子集A,B,使得所有边两端分别属于两个子集A,B。 度娘的解释。 要判断二分图,要分两种情况,一种是联通图,一种是非连通图,两者都不难。 大致思路就是先找到一个没被染色的节点u,把它染上一种颜色,之后遍历所有与它相连的节点v
阅读全文
posted @
2017-05-12 20:50
江屿
阅读(3740)
评论(0)
推荐(3)
POJ3352 Road Construction
摘要:Road Construction 来自这里。 双连通分量 题意:比较裸的题意,就是给一个无向图,问添加多少条边后能使整个图变成双连通分量 分析:建议先学了双连通分量的相关知识,因为这题是算是个模板题(我自己写了模板,过了这题,但是还没有充分测试),如果没学好相关知识即便这个模板题也不好懂 双连通分
阅读全文
posted @
2017-05-12 20:12
江屿
阅读(173)
评论(0)
推荐(0)
POJ2117 Electricity
摘要:Electricity poj上的一道割点的题。 题目大意就是求删去一点后,形成的联通块的最大值。 思路: 先求该图的割点。 如果删除的点是割点的话,需要分类讨论: 1.这个点是割点并且是根节点,那么增加的联通块就是树中的子节点数-1。 2.如果是割点但不是根节点,增加的联通块数就是搜索树中满足lo
阅读全文
posted @
2017-05-12 20:07
江屿
阅读(287)
评论(2)
推荐(0)
P2341 受欢迎的牛
摘要:受欢迎的牛 洛谷链接 题目大意: 有n头牛,牛会喜欢其他牛和自己,而喜欢是可以传递的,求被所有牛喜欢的牛的数量。 思路: 这是一道tarjan缩点的题目。被所有牛都喜欢的牛,一定会在一个强连通分量里。所以我们可以先求出所有强连通分量,缩点后找出度为0的点,如果超过1,则说明没有被所有牛喜欢的牛,如果
阅读全文
posted @
2017-05-11 09:31
江屿
阅读(240)
评论(0)
推荐(0)
有向无环图的拓扑排序
摘要:有向无环图的拓扑排序 有向无环图(DAG),指不存在环的有向图。 点的入度,指以这个点为结束点的边数。 点的出度,指以这个点为出发点的边数。 拓扑序就是对于节点的一个排列使得若(u,v)∈E,那么u在排列中出现的位置一定在v前面。 而拓扑排序,则是一个用于求解拓扑序的方法(只需要求出一组解) 根据以
阅读全文
posted @
2017-05-10 20:14
江屿
阅读(1082)
评论(0)
推荐(0)
P2296 寻找道路
摘要:寻找道路 洛谷链接 这个题是14年day2的第二题,也只有普及+/提高的难度。 题目大意就是在一堆满足所有后继连接的点都可以到达终点的点中,找到最短路径。 思路就是先一边dfs,求出满足条件1的点,之后spfa就好了,其实用bfs会更快一点。 代码: 1 #include<queue> 2 #inc
阅读全文
posted @
2017-05-10 16:31
江屿
阅读(286)
评论(0)
推荐(0)
P1266 速度限制
摘要:速度限制 洛谷链接 题目大意: 在一个城市中,每条道路有限速和长度,通过一条道路的时间为这条道路的长度除以限制的速度,有的道路不知道限速为多少,那么就按现在的速度走这条路,找出从第一个点到目标点的最短时间,输出从起点到终点所经过的点。 解题思路: 一看这道题,不就是最短路径的题,来spfa。但很明显
阅读全文
posted @
2017-05-10 14:39
江屿
阅读(417)
评论(3)
推荐(1)
P1186 玛丽卡
摘要:玛丽卡 洛谷链接 题目大意: 有n个节点m条边,有一条边无法经过,求出任意一条边无法经过时节点1到节点n的最短路径的最大值。 思路: 这个题乍一看,感觉和求次小生成树的思路差不多,都是先求出最优的,然后依次删除最优路线上的边,计算目标值。 所以我们可以用spfa遍历一遍,求出从节点1到节点n的最短路
阅读全文
posted @
2017-05-09 15:37
江屿
阅读(350)
评论(0)
推荐(0)
P1119 灾后重建
摘要:灾后重建 洛谷链接 还是最小生成树的题,不过加上了时间限制,一开始没看到题目上面说的t保证升序输入,然后想啊想啊想啊,感觉不能直接用floyed啊,之后。。。。。。。。 就是裸的floyed,四重循环,再加一个时间的判断。 难度竟然是提高+/省选。 但我对于这个题目的评价,和上一个一样,只有一句话:
阅读全文
posted @
2017-05-09 11:04
江屿
阅读(182)
评论(0)
推荐(0)
P1073 最优贸易
摘要:最优贸易 洛谷链接 这道题是09年提高组的第三题。 题目大意: 有个商人在一个图上走,图上的点有权值,各个点之间有边相连,求出在商人可以到达终点的条件下,所经历的点的最小权值与最大权值的差(每个点或边可以走多次)。 这个题有两种做法: 1. 用两遍dfs,一遍求出点的min,另一边求出点的max,最
阅读全文
posted @
2017-05-09 09:35
江屿
阅读(176)
评论(0)
推荐(0)
POJ1797 Heavy Transportation
摘要:Heavy Transportation 题目大意: Hugo Heavy要从城市1到城市N运送货物,有M条道路,每条道路都有它的最大载重量,问从城市1到城市N运送最多的重量是多少。 思路: 这个题,根据题目要求,我们发现这个题和最小生成树正好相反,所以我们使用Kruskal求解最大生成树。 但这个
阅读全文
posted @
2017-05-09 08:34
江屿
阅读(209)
评论(0)
推荐(0)
P2866 糟糕的一天
摘要:糟糕的一天 洛谷链接 挺水的一道题,也就是看每个数后面有多少数比它小,最后把总数加起来。 我们可以用单调栈来实现,并用一个数组来保存每个数现在的状态。 代码: 1 #include<cstdio> 2 long long n,a[80010],stack[80010],top,ans=0; 3 in
阅读全文
posted @
2017-05-08 20:09
江屿
阅读(152)
评论(0)
推荐(0)
P1155 双栈排序
摘要:双栈排序 洛谷链接 用双栈进行排序,也就是给出一个序列,让你用两个栈来排序,输出排序的操作类型。 实现也比较简单,如果存在一个k,使得i<j<k且a[k]<a[i]<a[j],那么i和j就不能存在一个栈中。 代码: 1 #include<cstdio> 2 #include<cstdlib> 3 #
阅读全文
posted @
2017-05-08 16:42
江屿
阅读(205)
评论(0)
推荐(0)
P1027 car的旅行路线
摘要:car的旅行路线 洛谷链接 这个题关键就是 如何把每个点表示出来,其实求出四个点的坐标后,只需要把这些点连接起来,用一遍folyed求出最短路径就好了。 代码: 1 #include<cmath> 2 #include<cstdio> 3 int x[801],y[801];//x表示横坐标,y表示
阅读全文
posted @
2017-05-08 15:58
江屿
阅读(279)
评论(0)
推荐(0)
POJ3037 Skiing
摘要:Skiing 题目大意: 给定一个M*N的网格,已知在每个网格中的点可以向上下左右四个方向移动一个单位,每个点都有一个高度值。 从每个点开始移动时存在一个速度值,从A点移动到B点,则此时B点的速度为"A的速度*2^(A的高度值-B的高度值)",而A点移动到B点所用的时间则是A点开始移动的速度值的倒数
阅读全文
posted @
2017-05-08 15:05
江屿
阅读(198)
评论(0)
推荐(0)
POJ1125 Stockbroker Grapevine
摘要:Stockbroker Grapevine 题目大意是 有N个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径。现在有一个消息要由某个人开始传递给其他所有人,问应该由哪一个人来传递,才能在最短时间内让所有人都接收到消息。若不存在这样一个人,则输出disjoint。 这道题,由于数据范围只有
阅读全文
posted @
2017-05-08 11:19
江屿
阅读(207)
评论(0)
推荐(0)
POJ2421 Constructing Roads
摘要:Constructing Roads 这道题很水,就是一个裸的最小生成树,最不过把已经连接的节点的值再设为0。 代码: 1 #include<cstdio> 2 #include<cstring> 3 #define N 1010 4 int dis[N][N],minn[N],n,m,a,b; 5
阅读全文
posted @
2017-05-07 21:10
江屿
阅读(206)
评论(0)
推荐(0)
最短路径算法二
摘要:最短路径算法2——Bellman-Ford与SPFA算法 Bellman-Ford算法: 只能计算单源最短路径,时间复杂度为O(nm)n是顶点数,m是边数。 其实这个算法很简单,代码实现也很简单,大致和Floyed差不多吧。 循环n-1次,每次循环遍历所有边,必然会有一些边连接着蓝点与白点。因此每次
阅读全文
posted @
2017-05-07 19:23
江屿
阅读(223)
评论(0)
推荐(0)
最短路径算法一
摘要:最短路径算法1——Floyed与Dijkstra算法。 Floyed算法: 求图中一个点到另一个点的最短路径,毫无疑问Floyed算法是最简单的,而且是多源最短路径,但时间复杂度很高,达到O(n^3)。 原理就是不断遍历一边所有点,把他们当作中间点,每次更新整个图。 Floyed代码: 1 #inc
阅读全文
posted @
2017-05-07 11:31
江屿
阅读(242)
评论(0)
推荐(0)
图的最小生成树——Prim算法
摘要:Prim算法 Prim算法求最小生成树是采取蓝白点的思想,白点代表已经加入最小生成树的点,蓝点表示未加入最小生成树的点。 进行n次循环,每次循环把一个蓝点变为白点,该蓝点应该是与白点相连的最小边权的是当前蓝点中最小的。这样就相当于向生成树中添加了n-1次最小的边,最后得到的一定是最小生成树。 1 #
阅读全文
posted @
2017-05-07 09:29
江屿
阅读(344)
评论(0)
推荐(0)
图的最小生成树——Kruskal算法
摘要:Kruskal算法 图的最小生成树的算法之一,运用并查集思想来求出最小生成树。 基本思路就是把所有边从小到大排序,依次遍历这些边。如果这条边所连接的两个点在一个连通块里,遍历下一条边,如果不在,就把这条边加入连通块,这样就可以保证生成树的边权最小。 我们使用并查集来判断两个点是否在同一个连通块里,如
阅读全文
posted @
2017-05-07 09:01
江屿
阅读(371)
评论(0)
推荐(0)
P3258 松鼠的新家
摘要:松鼠的新家 洛谷链接 尽管标签是省选/NOI-,但提交的通过率已经高到三分之一了。 但它仍旧是一个省选/NOI-的题。 大致题意就是按输入的顺序走一棵树,看每个节点经过多少次。问题就相当于把一条链上的所有节点权值都加一,最后统计每个点的权值。 但这样的时间复杂度比较高,所以我们可以把这条链的头节点和
阅读全文
posted @
2017-05-06 16:42
江屿
阅读(229)
评论(0)
推荐(0)
P3398 仓鼠找sugar
摘要:仓鼠找sugar 洛谷链接 一道提高+/省选-的题目,终于可以提高博客题目的平均难度了。。。 大致题意就是在一棵树上有两条路径,询问这两个路径是不是可以相交。 而如果两条路径相交的话,一定有一条路径a两端点的LCA在另一条的路径上,我们可以通过求路径a的LCA是不是在路径b上来求出a与b是不是相交的
阅读全文
posted @
2017-05-06 16:07
江屿
阅读(315)
评论(0)
推荐(2)
bzoj 1787 Meet 紧急集合
摘要:Meet 紧急集合 这个题是在脖子oj(清北某奆佬给起的名字)八中oj(大视野在线评测)上的。 给出bzoj链接。 这个题还是求最近公共祖先的问题。 而该题不同于别的题,它是需要求三个点的最近公共祖先。 我们就需要求出三个点两两之间的LCA。 而这三个LCA之间,必有两个是相同的。 如果两个点相同,
阅读全文
posted @
2017-05-06 10:15
江屿
阅读(267)
评论(0)
推荐(0)
树链剖分求LCA
摘要:树链剖分求LCA 树链剖分需要将树的边分为重边和轻边。每个节点和他的儿子之间只能有一条重边,连接着该节点与他儿子中子树节点最大的一个。一系列连续起来的重边叫做重链,重链上的每个点的top值都是重链的顶端节点。 用树链剖分来求LCA,就需要每次比较top_x与top_y的深度,将深度较大的点变为top
阅读全文
posted @
2017-05-05 21:10
江屿
阅读(1098)
评论(0)
推荐(2)
倍增法求LCA
摘要:倍增法求LCA LCA(Least Common Ancestors)的意思是最近公共祖先,即在一棵树中,找出两节点最近的公共祖先。 倍增法是通过一个数组来实现直接找到一个节点的某个祖先,这样我们就可以在O(logn)的时间内求出求出任意节点的任意祖先。 然后先把两个节点中转化为深度相同的节点,然后
阅读全文
posted @
2017-05-05 17:43
江屿
阅读(1522)
评论(1)
推荐(0)
P1364 医院设置
摘要:医院设置 又是一道水题。 洛谷链接。 洛谷上的数据特别水,o(n^3)都能过。 当然,我是不会用那种暴力枚举的方法的。 这里要讲的是一种O(n)的做法,对于洛谷那五个数据点,会实现5个0ms。 大家可以先看一下博客——树的直径及重心,直径没必要看,主要是看重心的求法。 而这里用的是加权重心,比重心更
阅读全文
posted @
2017-05-05 11:43
江屿
阅读(426)
评论(0)
推荐(2)
P1351 联合权值
摘要:联合权值 然而这只是一道普及+/提高的大水题 洛谷链接 这道题是2014年提高组day1的第二题。 简单题意就是在树上每个点都有权值,相邻两点的距离为1,求距离为2的点的权值乘积的和以及最大值。 基本思路就是遍历整棵树,然后找到距离该点距离为2的点,计算距离,更新最大值和乘积和。 但这样就很慢了。所
阅读全文
posted @
2017-05-05 09:41
江屿
阅读(260)
评论(3)
推荐(2)
树的直径及重心
摘要:1.树的直径 树上最长的简单路径即为树的直径。 求树的直径的方法就是在树上任选一点u,求距离点u最远的点y,再求距离点y最远的点s,点y到点s的距离即为树的直径。 1 #include<cstdio> 2 #include<cstring> 3 #define N 4200 4 struct heh
阅读全文
posted @
2017-05-04 21:05
江屿
阅读(4160)
评论(1)
推荐(5)
图的存储方式
摘要:图的存储方式 1.邻接矩阵 邻接矩阵的二维数组表示第i个点到第j个点的权值为dis[i][j]。 实现容易,但时空复杂度都比较大,时间复杂度为O(n*n),空间复杂度为O(n*n)。 适合稠密图。 下为代码: 1 #include<cstdio> 2 #define N 4200 3 int vis
阅读全文
posted @
2017-05-04 18:45
江屿
阅读(286)
评论(0)
推荐(1)
树的表示方法
摘要:树的表示方法 树的表示方法一般有三种:遍历表示法,括号序列法以及prufer数列。 1.遍历表示法 遍历表示法就是通过遍历一棵树来确定这棵树的表示方法。遍历方法有三种:先序遍历,中序遍历和后序遍历。 先序遍历:按照父节点,左子结点,右子节点来遍历(简称 头左右)。以上图为例,先序遍历表达式为1 2
阅读全文
posted @
2017-05-04 15:59
江屿
阅读(5094)
评论(0)
推荐(0)
公告