自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 洛谷P3225 [HNOI2012]矿场搭建 割点 tarjan 点双

题目链接:https://www.luogu.com.cn/problem/P3225解决这道题目之前,先说明两个知识点。什么是点双?点双即点双连通分量,在一个连通图里,任意点到其他点都有两条点不重复路径,这就被称为点双连通分量,仅有一条边为特殊的点双。什么是割点?割点就是在一个连通图里,删去这个点后,连通分支增多的那个点。可以用tarjan来找。不同点双至多只有一个公共点,并且是割点,每...

2020-02-29 15:27:53 201

原创 洛谷P3119 [USACO15JAN]Grass Cownoisseur G tarjan+spfa

题目链接:https://www.luogu.com.cn/problem/P3119首先肯定是要用tarjan缩点的,这样图上就不会有环了,你所需做的就是加一条边的反向边,使这张图能有以 1 为起点 和 终点的环,并且这个环要尽可能大。我在洛谷的题解里看到一个非常巧妙的做法,我们可以将缩完点的图复制一下,形成上下两层相同的图,下层每个点的编号是上层每个点编号+col_id(强连通分量的数量),...

2020-02-28 22:10:47 247

原创 洛谷P3469 [POI2008]BLO-Blockade 割点

题目链接:https://www.luogu.com.cn/problem/P3469分两种情况;情况1:选择的不是割点,说明删除该点后,整张图还是连通的,剩余 n-1 个点还是可以互相访问的,只是少了被删的点访问其他点与其他点访问被删的点,即(n-1)*2 次。情况2:选择的是割点,删去该点后,整个图会被分成 k 个连通块,访问此时会少Σki (第i个连通块的节点数) 乘 n-ki+ n...

2020-02-28 18:20:12 171

原创 洛谷P2746 [USACO5.3]校园网Network of Schools 强连通分量

题目链接:https://www.luogu.com.cn/problem/P2746任务A:求最少的接受软件的学校数目,能使所有学校都能用到软件。任务B:求最少扩展几个学校,能使从任意学校发软件可以使所有学校用到。我们抽象成图,任务A就变成选择最少几个点能遍历全图,任务B就变成加几条边,能使整个图变成强连通分量。我们可以知道,任意一个强连通分量里的点是互相可达的,所以我们先用tarjan...

2020-02-28 13:28:10 134

原创 洛谷P2341 [USACO03NOV][HAOI2006]受欢迎的牛 G 强连通分量

题目链接:https://www.luogu.com.cn/problem/P2341本题就是要求强连通分量,那么何为强连通分量?言简意赅地说就是在一个有向图中所有点可以互相可达。在一个强连通分量中,所有牛都是互相喜欢的。我们可以用tarjan来求强连通分量,把一个强连通分量的点全部染成一个颜色,如果一个强连通分量的出度为0,这个强连通分量的牛就可能是明星奶牛,但如果有两个强连通分量的出度为0,...

2020-02-28 11:03:06 163

原创 洛谷P1081 开车旅行 倍增+双向链表

题目链接:https://www.luogu.com.cn/problem/P1081此题难点在于预处理(难想到)和一些细节。如果我们暴力找最近和次近的点时间复杂度为O(n^2),肯定超时。所以我们要换个方法。这里用双向链表,我们将每个点放进链表,按海拔从低到高排序。然后按从西往东的顺序,一个一个拿出来,它的最近点和次近点,就是 i-2 i-1 i+1 i+2 里面的。更新完这个点到最近和次近距...

2020-02-27 22:44:40 178

原创 洛谷P1613 跑路 最短路+倍增

题目链接:https://www.luogu.com.cn/problem/P1613本题有一个跑路器,可以在一秒钟跑 2^k 千米。很显然,我们要将所有相距 2^k 千米的路径改为 1 秒钟可达。然后用Floyd跑最短路即可。要用什么方法呢,很明显要用倍增。记一个布尔型vis[i][j][k]数组,真的话表示 i~j 有一条 2^k 千米的路径。如果vis[i][t][k-1]为真,vis[t...

2020-02-27 19:27:13 220

原创 洛谷P1967 货车运输 生成树+LCA 倍增

题目链接:https://www.luogu.com.cn/problem/P1967这题我们可以知道有些边是肯定不会用到的,所以我们想办法去边。把这个图的最大生成树求出来即可。然后求两点的最小限重,用树上倍增求LCA,过程种更新最小限重。代码如下#include <bits/stdc++.h>using namespace std;const int maxn=1e4+5;...

2020-02-27 18:11:00 167

原创 洛谷P2161 [SHOI2009]会场预约 线段树染色

题目链接:https://www.luogu.com.cn/problem/P2161本题有好多做法,什么平衡树呀,STL呀,无奈蒟蒻的我只能用线段树染色来做。每次A操作,把一个区间给染色了,如果那个区间之前被染色过,就要被删除,这里我们不直接删除,而是用 del数组 标记一下该颜色已被删除即可。我们需要在标准区间更新线段的基础加上一个 update 函数,当我们要染色的区间包含了当前区间,就...

2020-02-27 13:18:43 127

原创 洛谷P1484 种树 贪心+堆

题目链接:https://www.luogu.com.cn/problem/P1484一开始看到这题,想到用DP来做,但是n<=50,000(实在是太大了)。所以就换个思路,贪心。假设 k=1 即只种一棵树,那肯定种盈利最大的那个,设为 i ,盈利为a[i]。若 k=2 要种两颗树了,此时我们只有两种选择,种 i 以及和它不相邻的那个坑,或者种 i 左右的两坑,即 i-1 与 i+1。...

2020-02-26 20:22:49 179

原创 洛谷P2278 [HNOI2003]操作系统 堆 优先队列

题目链接:https://www.luogu.com.cn/problem/P2278这里用优先队列,优先级高的优先,如果优先级相等,编号小的优先。这里记一个时间now,每输入一组数据,若队列为空,说明此时CPU未被占用,将该进程放入队列,并更新时间now为该进程开始时间time。如果队列不为空,如果时间now+队首执行时间len<=新进程的开始时间time,说明队首进程可以在新进程到...

2020-02-26 17:24:04 177 1

原创 洛谷P1801 黑匣子 堆

题目链接:https://www.luogu.com.cn/problem/P1801本题用一个小根堆,一个大根堆即可解决。每有一个新元素,将它和大根堆的堆顶进行比较,如果比它小,将它放入大根堆,并把大根堆堆顶放入小根堆。如果比它大,直接将其放入小根堆。如果这次有GET命令,就输出小根堆堆顶元素,并将其拿出放入大根堆。代码如下(用的优先队列)#include <bits/stdc++...

2020-02-26 15:57:17 197

原创 洛谷P2085 最小函数值 堆

题目链接:https://www.luogu.com.cn/problem/P2085根据题目,我们可以很容易知道,一个函数F(x),F(1)一定数所有函数值里最小的并且,F(1)<F(2)<F(3)<…<F(n)。我们先将所有函数的F(1)放入堆中,按函数值从小到大排序,然后每次取出堆顶heap[1],放入F(x+1),更新小根堆,重复m次即可。代码如下(这里手写堆,...

2020-02-26 13:07:47 181

原创 洛谷P1631 序列合并 堆

题目链接:https://www.luogu.com.cn/problem/P1631这题要我们输出前n小的数,可以用堆来解决。我们首先可以看出这样一个规律(A序列与B序列都是从小到大排序):A1+B1<=A1+B2<=A1+B3<=…<=A1+Bn;A2+B1<=A2+B2<=A2+B3<=…<=A2+Bn;…An+B1<=An+...

2020-02-26 12:15:16 199

原创 洛谷P1196 [NOI2002]银河英雄传说 并查集

题目链接:https://www.luogu.com.cn/problem/P1196这题巧妙利用了的性质,并查集每次合并时,只是将一点的祖先节点的祖先节点更新为另一点的祖先节点,而原本以被更改的祖先节点为祖先节点的点并没有被更改祖先节点,而是在下次查找的时候才更新成新的祖先节点。这道题,就是在更新每个点的祖先节点的时候,更新每个点到新祖先节点的距离。我们要在每次飞船调动时,该点的祖先节点到...

2020-02-25 20:32:43 232

原创 洛谷P1197 [JSOI2008]星球大战 并查集+逆向思维

题目链接:https://www.luogu.com.cn/problem/P1197这题最暴力的想法是每次拆一个点之后重建图,来拆之前比较连通块的数量。但这样做时间肯定不允许。正确做法是逆向思维,我们先把所有要拆的点全部拆掉,记录此时的连通块数量。然后,从后往前,把拆的点重建,重建时连通块要+1(因为新加入了一个连通块),之后从新建的点连边,有合并的连通块,连通块数量-1,记入答案数组。最后...

2020-02-25 18:23:04 154

原创 洛谷P1111 修复公路 并查集

题目链接:https://www.luogu.com.cn/problem/P1111这题就是并查集的运用,我们先将每条道路按完工时间由小到大排序。我们每次从未完工的挑一条时间最少的,把它完工,看他的起点和终点是否未曾相连(即是不是一个连通块),将他们相连,并将连通块边数cnt++,当连通块连通了所有点(即cnt==n-1),输出此时的时间。如果公路全部建完,还没满足条件,输出-1。代码如下...

2020-02-25 14:57:59 201

原创 洛谷P2024 [NOI2001]食物链 种类并查集

题目链接:https://www.luogu.com.cn/problem/P2024这题解法有点类似于洛谷P1525关押罪犯,用到种类并查集,只不过关押罪犯用到两种,而这道题用到三种,分别是同类,天敌与猎物。我们并查集数组开三倍,1-n代表同类,1+n-2n代表猎物,1+2n-3n代表天敌。如果x与y是同类,x就不能是y的天敌与猎物,否则就是假话,如果x是y的天敌,x就不能是y的猎物与同类...

2020-02-25 14:51:05 169

原创 洛谷P1983 车站分级 拓扑排序

题目链接:https://www.luogu.com.cn/problem/P1983此题是用拓扑排序求层数,将等级高的点连向等级的点,连成的图用拓扑排序看一下多少层,即答案。代码如下#include <bits/stdc++.h>using namespace std;const int maxn=1e3+5;int n,m,k;bool tag[maxn][maxn...

2020-02-24 19:41:20 227

原创 洛谷P1525 关押罪犯 贪心+并查集

题目链接:https://www.luogu.com.cn/problem/P1525题目要求使发生的冲突影响力最大的最小,这里用贪心+并查集,将所有可能发生的冲突按影响力从大到小排序,每次从中挑最大的,将两个人安排到不同监狱。用并查集判断两人是否在同一监狱,如果已在同一监狱,输出这个冲突的影响力大小。否则,将他划到对方仇人的那个监狱。注意要加一个enemy数组记录仇人。代码如下#inclu...

2020-02-24 17:53:36 210

原创 洛谷P1268 树的重量 贪心+树的性质

题目链接:https://www.luogu.com.cn/problem/P1268好嘛~又是一道看不懂题目的题。看了别人的解释,终于明白了,题目就是图上有好多点,点到其他点都有一个距离,而且点到点的直接距离一定比借助其他点为中转点的距离要短。但是边和边之间可以共用。让我们求树上所有边的长度之和。我们首先看n=2的情况,只有两个点,答案就是dis(v1,v2)当n=3时,有三个点,答案是...

2020-02-24 13:12:21 173

原创 洛谷P1113 杂务 拓扑排序

题目链接:https://www.luogu.com.cn/problem/P1113题目让我们求完成所有杂物的最短时间,实际上就是找一条关键路径,这条关键路径上的时间就是答案。找关键路径可以用拓扑排序,当然拓扑排序只适用于有向无环图(DAG),如果不是有向无环图(DAG)是无法找完所有的点的。这道题,要记录两个数组,每个节点的开始时间,和结束时间,在拓扑排序的过程中更新,最后遍历结束时间的数...

2020-02-24 11:56:33 262

原创 洛谷P1265 公路修建 最小生成树

题目链接:https://www.luogu.com.cn/problem/P1265题目要求城市要与距离自己最近的城市修建公路,乍一看这不是最小生成树吗?!但本题还有一个条件,当三个城市要连成环时,要否决距离最短的那条公路。但是,除非是等腰三角形,不可能存在连成环的情况,但如果是等腰三角形。就可以连成等腰或者不连成等腰,这与题目唯一解就相矛盾了,所以还是求最小生成树。这里用prime,因为城市...

2020-02-23 19:13:51 224

原创 洛谷P1991 无线通讯网 最小生成树

题目链接:https://www.luogu.com.cn/problem/P1991题目要求瓶颈生成树,最小生成树是瓶颈生成树的充分不必要条件。由于可以用卫星电话,所以我们可以这样想当我们把最小生成树求出来之后,将最长的那几条边用卫星电话连接,就可以使无线电范围尽可能小。如果有m个卫星电话,能连成m-1条边。所以我们在求最小生成树的时候,只需要求到n-m条即可。这里我用的kruskal算法。...

2020-02-23 18:10:52 167

原创 洛谷P2330 [SCOI2005]繁忙的都市 最小生成树模板题

题目链接:https://www.luogu.com.cn/problem/P2330题目第一条件要让所有交叉路口连接起来,这就是要让图上所有点连通。第二个条件要用最少道路,显而易见是找生成树。第三个条件要使分值最大的道路分值尽量小,就是要找最小生成树。这里我用的是kruskal算法,最后一条被添加的边的长度就是生成树中分值最大的边。代码如下#include <bits/stdc++....

2020-02-23 17:08:36 310

原创 洛谷P1546 最短网络 Agri-Net 最小生成树模板题

题目链接:https://www.luogu.com.cn/problem/P1546已知图中点到点的距离,求最小生成树。直接用邻接矩阵即可,最小生成树模板题,我用的prime算法。代码如下#include <bits/stdc++.h>using namespace std;const int maxn=110;const int inf=0xfffffff;int v...

2020-02-23 16:27:43 187

原创 洛谷P1522 牛的旅行 Cow Tours 并查集+Floyd求最短路

题目链接:https://www.luogu.com.cn/problem/P15221.用并查集找位于同一牧场的牧区,找的过程中初始化各点的距离。2.用Floyd算法更新位于同一牧场的各牧区的最短距离。3.枚举任意在相同牧场的牧区,更新以这一牧区为起始点能到同一牧场其它牧区的最大距离。4.枚举任意位于不同牧场的牧区,更新连接两个牧场后新牧场的最小直径。5.枚举所有牧场直径,更新答案。...

2020-02-22 19:46:01 185

原创 洛谷P1119 灾后重建 巧妙使用Floyd算法求最短路

题目链接:https://www.luogu.com.cn/problem/P1119Floyd算法是让每一个点当中转点看能否使点到点的距离变短,本题就是根据重建时间加入中转点(不是简单的套模板,三重循环),求最短路。如果该村庄的重建时间小于询问时间,就把这个村庄作为中转点,更新各点的最短路。代码如下:#include <bits/stdc++.h>using namespa...

2020-02-22 16:54:44 166

原创 洛谷P1346 电车 dijkstra求最短路

一道很简单的求最短路的题目,不用按开关就能走的,花费cost为0,要按开关才能走的,花费cost为1,dijkstra求最短路即可,下贴代码。#include <bits/stdc++.h>using namespace std;const int maxn=1e4+5;const int inf=1e9+7;struct node{ int next,to,cos...

2020-02-22 15:27:51 195

原创 洛谷P1462 通往奥格瑞玛的道路 二分答案,dijkstra求最短路,堆优化

将每个城市的所需过路费放在答案数组中,排序,找到起点与终点最大过路费的位置,作为二分的左界,所有城市中最大的过路费作为二分的右界。每次选一个上限花费,高于这个消费的城市就不能选择,dijkstra找耗血最少的路线即最短路,看以这个花费作为上限花费,能不能血量高于0走到终点,如果能r=mid,降低上限消费,如果不能,l=mid+1,提高上限消费,下贴代码。#include <bits/std...

2020-02-22 13:57:09 197

原创 洛谷P2661 信息传递 tarjan或者并查集找环

我是tarjan做的,用tarjan找环,并更新最小环长度,开始输边的时候如果有起点等于终点的就直接输出1,在tarjan中的话去掉那些长度为1的强连通分量,因为他们不能构成环,所以不能用他们更新答案。这题能用并查集做的原因是每个点只有一条向外的边,所以如果两个点祖先相同,就能构成环,所以只需要在并查集的过程中更新路径长度,然后如果两个点祖先相等,说明能构成环,更新答案,下贴用tarjan做的代码...

2020-02-22 13:43:32 179

原创 优先队列

优先队列(priority queue)普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。//摘自百度百科简单的来说,优先队列作为一个容器,保证按照规定的顺序,最‘大’的元素优先删除。(这里的...

2020-02-22 13:38:40 419

UnrealEngine观察者模式案例+事件分发器

UnrealEngine观察者模式案例+事件分发器

2024-08-08

空空如也

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

TA关注的人

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