自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Dan__ge的博客

Today is difficult,tomorrow is more difficult,but the day after is beautiful.

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

原创 POJ 1515 双联通分量

点击打开链接题意:给一个联通的无向图,然后问你将其中的边变为有向的,加边使其变成有向的联通图思路:若无向图有双联通分量,那么这个分量里的元素可以变成有向图的强联通,这应该很好看出来,然后需要加的边是什么呢,就是这个图上的桥呗,是桥的话变成有向的就要加一条边,然后剩下的无向图的双联通分量可以用dfs搜一下,边搜边输出就可以了,将桥记录下来遇到桥的时候特殊处理一下,然后双联通分量里的边每一条只

2016-05-31 15:44:39 2486

原创 POJ 1679 最小生成树

点击打开链接题意:问最小生成树是否唯一思路:模版求次小生成树与最小生成树的值是否相同#include #include #include #include #include const double INF=0x3f3f3f3f;using namespace std;int dis[105],path[105][105],G[105][105];int n,m,p

2016-05-30 20:06:09 587

原创 UVALive 4730 线段树+并查集

点击打开链接题意:在坐标上给n个点,r的操作是将两个点连起来,l的操作是问你y=u的这条线连接的集合块数和这些集合内的点的个数思路:很麻烦的一道题,在网上看了题意和做法后,开始了一下午的调bug过程,做法很好懂,我开了两个线段树,一个维护点代表的直线的集合个数,另一个则是路过集合内的点的个数,然后集合的判断直接用并查集就行了,这是两个核心,然后就是自己瞎写的了,代码丑的可以而且好像除了

2016-05-29 19:52:07 3301

原创 UVALive 6091 并查集简单应用

点击打开链接题意:问你给出的图中有多少颗树,树的定义与最小生成树类似,不能有重边或者环思路:直接用并查集统计一下当前集合里的边的数量以及点的数量,如果点的数量与边的数量相等,那么是一颗树,统计完即可,水题~~~#include #include #include #include #include using namespace std;typedef long long ll

2016-05-28 20:22:35 3222

原创 coderforces 455C 并查集+树的直径

点击打开链接题意:有两种操作,1是问有u的最长路径的长度,2是将u与v的两个集合合并,但是要使得合并后的集合的最长路径最小思路:因为后面的操作才会改变路径长度,可以先将所有长度预处理出来,在一个集合的元素最长路径相同,然后再执行询问操作,就是这个预处理真的是醉了,就是两次BFS求出最大值,但是很有可能超时,因为如果两个点在一个集合,就要走150000次,然后再判断到每个点的最大值,

2016-05-28 19:16:12 3153

原创 ZOJ 3811 dfs&并查集

点击打开链接题意:给n个城镇,有的城镇会发光,给出发光的城镇,然后下面有一个人走的发光的城镇的顺序,每个城镇只会发一次光,问这个人按这个顺序是否合法并且所有的城镇都被访问到思路:可以用dfs去搜索,第一个点进去,不能走的点标记一下,然后第二个发光的城镇,判断目前标记的点中有没有,有的话说明现在可以走第二个点,以此类推,最后判断城镇是否全被访问过,一会试试并查集的方法#include #i

2016-05-28 14:32:17 726

原创 POJ 3228 网络流+二分&并查集

点击打开链接题意:有n个城镇,第一行是金矿和金子数量,然后第二行是装金子的地方和能装的数量,在下面是m条道路,问你选择的道路中最大值最小,使得所有金子运到装金子的地方思路:最大值最小,根本不用考虑一看就是二分,然后想了想就是个网络流的模型嘛,很简单,被坑了几次道路是双向的,改过之后A掉,然后看了看讨论还可以用并查集写,这里两种方法都写了,先是网络流的直接二分最大值,然后满足条件的边建模型,

2016-05-28 12:26:11 3237

原创 HDU 4430 二分~现场题目

点击打开链接题意:n根蜡烛,蛋糕是R层的,每一层可以插k的I次方个蜡烛,然后蛋糕中心可以或不插蜡烛,问R*K最小的情况中R最小的那组答案,且这R层必须插满思路:因为它一定是插满的,对于一个R层的蛋糕,它的蛋糕上插的蜡烛数量是随着K的增大而增大,满足单调性可以用二分,然后蛋糕层数可知最大不会超过50,那么枚举就行了,简单的二分,但是要注意的是K的i次方是有可能爆long long的,我的判断

2016-05-27 20:02:35 522

原创 HDU 4424 并查集

点击打开链接题意:给n个城镇,然后每两个城镇的价值给出,但是u->v的价值是u->v这条路径上的最小值,问从任意一个点出发到其他位置的和的最大值思路:因为限制条件是路径上的最小值,那么我们按价值排序,从大到小排,就可以避免这个问题了,然后利用并查集来完成,对于两个集合,左集合的价值总和为A,右集合的价值总和为B,现在有一条路径连接这两个集合,那么我们考虑的是将A合并到B还是将B合并到A,我

2016-05-27 17:37:18 3045

原创 HDU 2473 并查集

点击打开链接题意:给了两种操作,M u v将u与v连接到一起,S u 将u从它的集合中拿出来,但是不改变集合中的其他元素已有的关系思路:就是直接并查集,然后有了个删点的操作,这与之前写的ZOJ 3789的删除操作是一样的,找个数组代替就可以了,简单~~~  PS:加了路径压缩跑得还是那么慢,org#include #include #include #include #includ

2016-05-27 13:57:04 675

原创 HDU 3172 并查集+trie树

点击打开链接题意:给n个关系,然后问u与v的集合中元素的个数思路:就是简单的并查集就行了,只是这个给的字符串比较猥琐,我们用trie树查找就行了,操作还是很简单的,然后注意的是出题人竟然设置了多组,还要多组输入,只能感叹,WA了两次,org~~~#include #include #include #include #include using namespace std;ty

2016-05-27 13:18:09 759

原创 ZOJ 3789 并查集

点击打开链接题意:只说那几个操作把,L将u与v连接,若u左旋,则v右旋,不会出现不合法的条件,Q问u与v的关系,若已知的条件不能判断在则Unknown,旋转方向不一样则Different,一样则Same,然后还有个查询S,问当前u所在的集合的元素个数,D则为删除,但删除后不改变集合其它元素的关系思路:这题的方向我们可以用到根节点距离来表示,而距离的统计可以直接在路径压缩时完成,元素个数

2016-05-26 20:15:49 3579

原创 HDU 3635 并查集

点击打开链接题意:有n个村庄,初始每个村庄有一个龙珠,然后T是将A中的所有龙珠转到B所在的村庄中,然后Q是问A编号的龙珠所在的位置,这个位置的龙珠数量,和A移动的次数思路:用并查集的路径压缩来完成每个龙珠的转换次数,剩下的两个操作直接用简单的并查集即可完成,而路径压缩也就等价于这个点在走到现在位置所走的路径,那么路径压缩时直接将路过的值加起来就是结果了,画图可以很快看出来他的思想的#inc

2016-05-26 18:34:17 3328

原创 UESTC 686 BFS

点击打开链接题意:问你这个人从1开始走能不能将这个图走遍,有的点是锁着的,需要对应房间的钥匙思路:就是个BFS,不能走的点先记录下来,然后判断这里面的点有钥匙可以打开的便出来跑,直到没有这样的点为止,判断是不是所有的点都到了,判断输出即可,感觉数据有点弱.......(/ □ \)#include #include #include #include #include #

2016-05-25 21:40:19 3496

原创 HDU 4496 并查集

点击打开链接题意:给了一个图,问你依次将边删除后,图还剩下多少个联通的块思路:就是问你有多少个块嘛,可以用并查集来判断是不是在一个块内,然后我们将顺序反过来判断一下就可以了,水题~~~#include #include #include #include #include using namespace std;typedef long long ll;typedef

2016-05-25 19:56:49 3138

原创 HDU 1863 并查集+Kruskal

点击打开链接题意:不解释了思路:也不解释了,并查集判段连通性,Kruskal求最小生成树,大水题(/ □ \)#include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x

2016-05-25 19:34:17 3195

原创 HDU 5452 LCA

点击打开链接题意:给一个树和树上的分支组成的图,问我当且仅当删除一条树上的边,最少再删除几条边使得图不连通思路:我写了两个做法,第一种是不加优化的十分暴力的LCA,也就是裸的,因为这道题目的数据说很水,这样的复杂度也可以,O(n*m),n为20000,m为200000,明明是超时好不好,这个做法也简单易懂,在这个树上,我们加了一条边u->v,那么u与v的最近公共祖先为fa,那么u->f

2016-05-25 17:42:46 3337

原创 HDU 4685 强联通分量+网络流

点击打开链接题意:与POJ 1904 极其相像的一道题目,POJ的将一个完备匹配图给了你,并给了你一组可能的情况,很简单,但是这道题目,给的既不是完备匹配也没有给出可行的匹配方案,难的不要不要的思路:刚开始看以为是和1904一模一样呢,然而难度上升的真快,看了一下是13年的多校题目,过了10几个把,可想而知这难度不是我等能够A掉的,刚自己想的是只加王子使其变成完备匹配,然后WA了,对了说一

2016-05-24 19:27:48 4460 3

原创 HDU 2767 强联通分量

点击打开链接题意:问加多少边后图会变成强联通分量为1的图思路:简单的强联通,缩点后找入度和出度就行了,水题#include #include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn

2016-05-23 21:24:26 4581

原创 ZOJ 3772 线段树

点击打开链接题意:给一个数字序列,然后有m次询问,每次询问给了一个递推关系,然后输出询问的R的值思路:n是100000,m是100000,然后来询问,就算不知道题意肯定也要向线段树这方面来想,而线段树的应用无非就是节点保存的信息嘛,这道题目要的是一段连续的递推式子,那么我们的节点就可以保存递推式,而这个式子也很好推,看代码应该可以看得懂,然后飞根节点保存的就是两个儿子的矩阵乘积后的矩阵,然

2016-05-23 20:20:48 4461

原创 HDU 5493 线段树

点击打开链接题意:给n个人的身高和一个k,k代表的是这个人前边比他高的人的数量或者是后面的比他高的人的数量,问能否将这n个人满足条件的排序,有多解时输出字典序最小的思路:看到100000个人,感觉是线段树,但是没什么思路,看了大神们的博客,发现只要转化一下便是简单的线段树模型了,对于每个人来说,k就是前边留k个位置,后者后边留k个位置,当然这两个我肯定要选的是小的那个位置,这要是为

2016-05-23 17:18:49 3313

原创 NEFU 1160 线段树

点击打开链接题意:弱校的OJ的弱题,给定一棵树,和关系,然后在节点上更新时,它的所有儿子也要更新,有个判断条件,查询是所有节点的值的和思路:与HDU 5692一样的思路,不多说了#pragma comment(linker, "/STACK:102400000, 102400000")#include #include #include #include #include #i

2016-05-22 10:46:59 3752

原创 HDU 5692 线段树

点击打开链接题意:中文题目思路:这还是第一次写这样的线段树,个人感觉是一种套路之前没做过,但是思想什么巧妙,将一颗树转化成线段树真厉害,先是将每个节点的下面的所有数进行dfs编序号,并将他们的左右编号记下来,也就是我的代码中的L和R,而val记录的是根节点0到当前位置的费用,建树之后就很好操作了,更新时便找到当前节点的儿子和自己代表的区间,然后区间更新,注意题目说更新一个节点的值变为y,我

2016-05-21 19:58:18 6104

原创 POJ 3294 后缀数组+二分

点击打开链接题意:先是问你大于n/2个串的最长公共子串的长度,然后在这个长度的基础上,有多少子串是符合的,按字典序输出思路:先将最长公共子串的长度求出来,然后再跑一遍,将长度符合的找出来输出就行了,PS:昨天晚上调了几个小时的bug,妹的根本就不需要自己排序,用后缀数组先符合的肯定是字典序最小的嘛,蠢死的节奏,还有就是对于每一组的前缀我们只要第一个,这个也只需要标记一下即可,后者想不到的话

2016-05-20 08:55:50 864

原创 POJ 3450 3080 后缀数组+二分

点击打开链接题意:问所有串的最长公共子序列思路:后缀数组处理两个串的最长公共子序列用后缀数组非常简单就可以完成,这个多串的也一样,和两个串的处理方式相同,不多说#include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3

2016-05-19 12:22:54 757

原创 HDU 3047 带权并查集

点击打开链接题意:给了n个人和m个关系,关系为a,b,x,意思是b的位置大于a的位置x,问条件依次下去的矛盾的条件的个数思路:第一个带权的并查集,倒不是很难,它的算法思想非常给力,若两个不再同一集合的两个人,将b的根节点的父亲设为a的根节点,也就是合并,而所有的点到根的距离全部是用找根节点的路上完成更新的,而现在还需要的是b的根节点的位置,它的位置应该为r[bb]=r[a]+x-r[b],

2016-05-18 21:10:05 3341

原创 POJ 1204 AC自动机

点击打开链接题意:给个L*C的字符串矩阵,W个询问,对每个询问输出这个串第一次出现的位置及方向,共有8个方向,用A~H表示思路:用AC自动机进行快速匹配,细节处理特别多,不看题解的话应该会WA很多次,还有一个处理的非常巧妙地地方,就是我们要输出第一次出现的位置,而AC自动机不能回溯,所以将串反着构造进字典树里,真是神犇,然后方向设置时也反着就可以了#include #include #

2016-05-16 20:22:08 4813

原创 POJ 3693 后缀数组+RMQ

点击打开链接题意:问连续重复部分最多的串是什么,不能重叠,且我们要字典序最小的串如xbcabcab,有bcabca重复次数为2,cabcab重复次数也为2,那么要前边那个思路:以前写过一个类似的,SPOJ 687,这个只是求连续重复部分最多的串的次数,并不需要将按字典序最小串输出,那么我们可以用到SPOJ687的代码,用它我们可以求出那个重复的次数和满足这个次数的串的长度,那么就只差找到字

2016-05-16 16:55:23 3163

原创 POJ 1743 后缀数组

点击打开链接题意:问最长的两段连续子串的长度,且两段不重复,这两段可以是这样的第一段的每个数字加或减同一个数,形成的第二段思路:先将数字的差值计算出来,求后缀数组和高度数组,二分长度求出最长的,二分成功的条件为若二分值为mid,则对于有相同的公共前缀的长度大于mid的所有串中,最远距离减去最近距离的差值大于等于mid即可,具体看代码#include #include #include

2016-05-16 13:55:36 984

原创 HDU 4333 扩展KMP

点击打开链接题意:一个数字,依次将第一位放到最后一位,问小于本身的数的个数及等于本身的个数和大于本身的个数,但是要注意重复的不再计算思路:用扩展KMP我们可以处理,先将串复制到后面一次,然后求扩展KMP,那么我们如何比较呢,如果extand[i]的值大于串的长度len,说明我以i为开头的串和原串的匹配大于len,也就说明这个串和原串相等,接下来就是另外两种情况,若extand[i]匹配到了

2016-05-12 20:44:32 4274

原创 HDU 4313 并查集

点击打开链接题意:给一个城镇的图,有m个城镇上是有敌兵的,为了将所有敌兵的联系隔断,需要删除的所有边的最小的权值思路:看了就知道是并查集Kruskal思想的题,我们将边的权值从大到小向里面加,如果我要加的这条变加进去之后,敌兵可以相连,那么这条边肯定要删下去,而我们从大到小加的边,所以肯定是最小的,因为可以的边我们都用上了嘛#include #include #include

2016-05-12 19:46:09 3444

原创 HDU 4587 割点

点击打开链接题意:给一个无向图,可能是不连通的,问删除两个点之后联通块最多的数量,两个点随意思路:之前写过一个删除一个点的剩余联通块的题目,和这个差不多嘛,但是要注意细节,WA了10多次,对于一个5000个点和5000条边的图来说,我们可以先去枚举删除一个点,然后剩下的操作就和删除一个点的相同了我们找到最大的cnt,cnt记录的是这个点删除后的联通块个数-1;具体细节看代码把,注意这种情况

2016-05-11 11:01:48 934

原创 POJ 3694 强连通分量+LCA

点击打开链接题意:给一个图,然后依次加进去边,问每次加过边后还有几个桥,之前加入的会影响后面加入的思路:先将图的桥全部找出来,然后将桥的点标记上,然后不需要缩点,直接进行裸的LCA,再找最近公共祖先的时候,遇到标记的点将结果减1,然后将标记取消,不知道为什么我写的跑的特别慢,别人写的都很快,有神犇知道求指教#include #include #include #includ

2016-05-11 08:25:51 1179

原创 POJ 1904 强联通分量

点击打开链接题意:不说题意了,直接说它让干什么把,我们要找每个王子可以娶的女人,并且他娶了其中一个剩下的王子依然可以找到老婆,也就是固定一条边后,剩下的关系还是可以构成一个完备二分图,然后每个王子能娶的公主从小到大输出思路:这种题没做过,看了看网上的题解,是要找强联通分量,那么可以肯定的是如果id号王子在强联通分量里,那么这里面的所有公主都满足条件,因为图是王子连公主,公主

2016-05-10 19:42:47 1163

原创 51nod 1442 最大流

点击打开链接题意:中文了思路:最大流求解,源点连城市流量ai,城市连汇点流量bi,下面的边是无向图,拆点后建有向的就可以了,最后判断满流#include #include #include #include #include #include #include using namespace std;typedef long long ll;const int inf=0

2016-05-09 10:32:29 1384 1

原创 POJ 1509 后缀数组

点击打开链接题意:给个串问最小的后缀,但是这个串是个环思路:是个环也好处理,那么就将串复制一遍加到后面就行了,然后求出后缀数组和高度数组,刚开始我写的是就求出后缀数组sa,然后从排名第1开始找,比如找到了I,排名为I的从第sa[I]开始,那么如果这个值小于输入串的长度,直接输出就行,提交WA,看了看讨论,有这样的数组,aaaa那么应该输出1,而那个程序输出4,然后想到用高度数组,刚开始找到

2016-05-08 16:09:49 1065

原创 SPOJ 687 后缀数组+RMQ

点击打开链接题意:问给出的串中连续重复的子串的最长的长度思路:先将后缀数组和高度数组先求出来,分别为sa和lcp数组。,然后用RMQ的ST算法将从位置i和j开始的后缀的最长公共前缀求出来,这个还好理解把,对与排名第一的后缀,它的高度数组为与排名第二的后缀的最长公共前缀,依次类推,比如到第四个,前四个分别为5,3,0,2;那么第一个与第三个的公共前缀就为0,以第二个为媒介,第二个与第

2016-05-07 21:21:06 1863

原创 POJ 3261 后缀数组

点击打开链接题意:求最长的出现k次的子串的长度思路:连着做了几道后缀数组的题目,这题A的也很顺利,既然是找最大最小这种,二分无疑最好用,那么就是判断条件了,我YY了一下,没有证明对不对就交了一发,还好对了,二分判断条件是对所有的高度数组lcp来遍历,找连续的大于mid的长度的个数,多于k-1就可以返回1,不然返回0,就完事了,复杂度N*logN#include #include #in

2016-05-07 14:50:37 1040

原创 POJ 2217 后缀数组

点击打开链接题意:求最长公共子序列思路:和2774差不多的题,基本没动过,但是为什么过的人这么少呢,没多想交了一发,过了,看了看时间0ms,空间264K,好象不错唉,看看排行榜,卧槽,吓了自己一跳,第一什么情况,这还是第一次拿到这个,赶紧和队友炫耀了一番,上一次在51nod上和队友一起做了一道题,我先写完的,拿了第一,然后队友写完,比我快了10几ms,被他抢走个第一,纪念一下#includ

2016-05-07 13:51:24 915

原创 POJ 2774 后缀数组水题

点击打开链接题意:求两个串的最长公共子串思路:用后缀数组和高度数组简单求出,结果就是高度数组的最大值,看代码,对了开始吐槽.....挑战程序设计上的后缀数组这部分,代码简单易懂,我都看懂了.......然后呢这题我用挑战程序设计的模版写完跑了2047ms,看了看status,嗯什么情况,别人怎么300~400ms,难道模版不行,还真的是,据说是因为快速排序的原因,也只有这个原因了,将模版变

2016-05-07 13:27:05 1635

空空如也

空空如也

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

TA关注的人

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