- 博客(15)
- 收藏
- 关注
原创 poj 2570 Fiber Network floyd 传递闭包与二进制压缩
题意就是每个段光缆被一些公司掌握,询问所给定的一段上的光缆所有可以掌握它的公司,如果有字典序输出,没有的话输出‘-’。 思路: 看完题意不难想到就是个传递闭包将所有点对路径上的公共字符找出来,如果是处理字符串有点麻烦,就引出了一种新的方法和思想,二进制压缩。就是将有限字符集映射到一段二进制数上,这个忽然想起了真值函数的思想,二者本质相同,都是将难以处理的集合元素根据性质映射到01序列上。
2018-01-31 10:07:49 275
原创 poj 3268 Silver Cow Party
求所有奶牛往返的最短时间中最长的,将问题转化为两部分,一是求去时,这部分是将目标点作为起点,将每个点的出边作为数据建立邻接表,二是求回来时,这部分是将目标点作为起点,将每个点的入边作为数据建立邻接表。将上述求得的数据求和找最大。注意图有可能不是连通图。#include#include#include#include#includeusing namespace std;const
2018-01-30 16:33:24 181
原创 poj1135 Domino Effect
这个区域赛的题好难理解,题意是找最后多米诺骨牌什么时候倒下,以及倒下的位置。 思路是这样的因为救有两种倒下的情况,一是在关键牌处,一是在普通牌处,如果是在关键牌处那样的话就是一个到每个关键牌的最短路径中最大值问题,如果是普通牌处,那样肯定是在两个关键牌之间,来考虑这种情况下,时间改怎么样计算,假设最后倒在普通牌的位置 V ,那样的话肯定有一条边,这样的话,以V做顶点,将最后的这条边分为两份,分别
2018-01-29 18:21:40 349
原创 dijkstra算法
今天看了dijkstra算法,先来说一下核心的东西,首先他是用于边权全是正值的图中,类似于prim利用贪心思想来寻找最短路,利用的原理是;一条最短路的子路也是最短路的思想。每次将找到的新点进行松弛。#include#include#include#includeusing namespace std;const int MAXN = 500 + 10;const int MAX
2018-01-29 16:55:42 245
原创 poj 1556 The Doors
这个题复杂在建图比较难,就是要考虑墙阻碍路径怎么判断?还有就是墙上数据的储存。都是很经典的方法。 对于两点之间是否有路径的判断,就是判断两点之间是否有墙,对墙进行判断,因为两点之间可能有很多墙,所以要记录墙的位置,对于是否阻挡的判断就是判断中间那个墙的两个点位于所求两点的上下位置,同上同下为不阻挡,反之,则阻挡。#include#include#include#include#i
2018-01-28 20:47:06 151
原创 Arbitrage poj 2240 bellman-ford判圈应用
题解: 题目分析 题意是判断是否可以进行套利,就是判断图内是否存在一个圈,当经过这个圈回到终点时自己的钱是否可以增多。dis数组存的是同种货币进行汇兑的最大值。当“松弛”进行n次时,肯定存在圈的情况,这样的话,如果dis[v0] > 1的话,说明可以进行汇兑。#include#include#include#include#includeusing namespace
2018-01-27 20:12:02 235
原创 最短路之bellman-ford算法
先来说下bellman-ford算法的基本思想。假设在一个有向图中有n个点,那么从源点到任意其他一点的最短路径数量肯定不超过n - 1(假设不含回路)。那样放松一下限制的话,对于任意一条路径来说,将n - 1条边都尝试着“松弛”一下,那样的话,肯定就可以将这条路径变为最短路。 对于bellman-ford算法来说的话,它是采用类似于floyd算法的方式,每次外循环代表对每个点最多加入可以松弛边
2018-01-27 17:46:14 256
原创 hud 4081 次小生成树应用
这个题确实不简单,难就难在对题意的正确的理解上, 题意; 秦始皇想要修路使得n个城市连通,同时使得这些路尽量短。这时徐福说他可以在2个城市之间不花费人力物力建一条路,但他只能建1条这样的路。秦始皇想要使除了徐福造的那条路以外的路的总长度尽量短,而徐福想要造福更多的百姓,他想要使自己用法术建的那条路的两端的城市的总人口数最多。最终二人达成协议。假设A=用法术建的那条路的两端的城市的总人口数
2018-01-26 17:48:59 214
转载 次小生成树
#include #include #include using namespace std;const int maxn = 111;const int inf = 0x3f3f3f3f;int Map[maxn][maxn];//邻接矩阵存图int Max[maxn][maxn];//表示最小生成树中i到j的最大边权bool used[maxn][maxn];//判断该边是否
2018-01-25 21:58:33 253
转载 最小瓶颈路
开始研究最小瓶颈路。 最小瓶颈路 :给定一个加权无向图,并给定无向图中两个结点u和v,求u到v的一条路径,使得路径上边的最大权值最小。这个问题可以稍微加强一下,即求很多对结点之间的最小瓶颈路。 PS: 最小瓶颈路其实是边!!! 最小瓶颈路: 给定一个加权无向图,并给定无向图中两个结点u和v,求u到v的一条路径,使得路径上边的 最大权值 最小。这个问题可以稍微加强一下,即求很多对结点之间
2018-01-25 19:54:36 1249
转载 树状数组求逆序对 + 离散化(poj2299)
转载注明出处 https://www.cnblogs.com/xiongmao-cpp/p/5043340.html今天做了一个树状数组求逆序对的题,需要离散化,看了博客明白了为什么要进行离散化,原因是树状数组中的C[MAXN]数组其实相当于一个哈希操作,如果所给数组中存在值特别大的元素,数组就需要离散化#include#include#include#includeusin
2018-01-19 20:16:45 271
原创 对称博弈HDU3951
这个题意是有一个n个硬币围成圈,然后可以从这个圈的某一位置连续取最多k个.问先手是不是可以必胜.首先考虑特殊情况, 若 K >= n, 先手必胜. 首先明确一个策略,就是 跟随,建立对称的局面,跟随详见 > 简单来说先手无论怎么取,圈会变成一条链,后手现在要做的就是将这一条链变成两条长度相等的链,只有这样后手总会有机会取,这样后手必胜. 现在就是考虑后手什么情况下可以建
2018-01-16 19:31:25 355
原创 The Unique MST -----判定最小生成树的唯一性(kruslal算法)
先来说明一下最小生成树不唯一的原因,大的方面来说就是存在权值相同的边,并且这些权值相同的边在构建MIT时都有可能被用到,这是解决这个问题的核心。其实这种情况开可以继续细分, 情况一:权值相同的顶点有公共顶点. 情况二;权值相同的点没有公共顶点 情况三:情况一 + 情况二先来说一下kruslal算法的思想,先构建图,统计图中是否存在权值相同的边,如果没有这种情况直接可判断出 MIT唯一。
2018-01-12 13:15:11 935 1
原创 最小生成树prim算法
#include #include #include using namespace std; const int MAX = 0x3f3f3f3f; const int MAXN = 100 + 10; int _map[MAXN][MAXN]; int dis[MAXN]; bool tag[MAXN]; int n;
2018-01-10 17:24:20 222
原创 Codeforces Round #335 (Div. 2) C. Sorting Railway Cars 最长连续上升子序列
今天队内比赛心态有问题,脑子也有点抽,不知为什么.可能是太浮躁了吧.修炼! 先来说下这个题,一开始分析出来了找最长连续(值)上升子序列. 但是不知道怎么样写.看了大牛的写法,跪拜! 分析下:如果让每一个数当序列起点会超时(n^2).所以考虑怎么优化. 开一个数组记录以K为起点的满足要求序列的长度. 有如下关系 dp[k] = dp[k + 1] + 1 如果暴力的话求出的结果之间是有
2018-01-09 10:27:28 156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人