![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
圣托里尼的日落啊~
这个作者很懒,什么都没留下…
展开
-
【种类并查集】 --poj2492
题目来源: poj 2492#include <iostream>#include <algorithm>#include <cstdio>#include <map>using namespace std;const int maxn = 100010;int n, m;int father[maxn];int rel[maxn]...原创 2019-06-22 20:29:55 · 164 阅读 · 0 评论 -
【种类并查集】 -- poj1703
题目来源: poj 1703现在做并查集的题目好像越来越有感觉了开心。思路:#include <iostream>#include <algorithm>#include <cstdio>#include <map>using namespace std;const int maxn = 100010;int n, m;int f...原创 2019-06-22 19:55:15 · 123 阅读 · 0 评论 -
【种类并查集】 - poj2912
参考:参考博客#include <iostream>#include <algorithm>using namespace std;const int maxn = 50010;int n, m;struct node{ int x, y; int rel; node() {} node(int _x, int _y, int...原创 2019-06-21 11:14:17 · 154 阅读 · 0 评论 -
【种类并查集】--poj1182 食物链
题目来源:poj1182 参考:博客1 博客2思路:0 - 这个节点与它的父节点是同类1 - 这个节点被它的父节点吃2 - 这个节点吃它的父节点。路径压缩合并操作怎么求1’,2,3呢?1’:(3 - relation[y]) % 32:0 ?1 – d - 13:relation[x]#include <iostream>using nam...原创 2019-06-21 09:25:51 · 111 阅读 · 0 评论 -
【带权并查集】 -- 向量偏移 hdu3047
来源:hdu 3047 参考:有详细图解的博客#include <iostream>using namespace std;const int maxn = 50010;int n, m;int father[maxn];int sum[maxn]; //从当前结点到根节点的和int ans = 0;void init(){ for (int i = 0; ...原创 2019-06-20 19:44:33 · 125 阅读 · 0 评论 -
【带权并查集:区间统计】-- poj1733
题目来源:poj 1733参考:kungbin大神的解题报告思路:假如输入的[left,right]判断是同一个集合的,则奇偶性关系已经知道了。例子:加入输入的[left,right]不是同一个集合的,则需要unite。例子:如果已知[5,6]的奇偶性为偶数,[9,12]的奇偶性为奇数,新的输入为[7,12,odd]。则sum[6] = 1 ^ sum[8]^ sum[4]。...原创 2019-06-20 15:34:11 · 137 阅读 · 0 评论 -
【带权并查集】-- 向量偏移 hdu 3038
题目来源:hdu 3038写的很好的博客:地址sum[px]=sum[y]+value−sum[x]sum[px] = sum[y] + value - sum[x]sum[px]=sum[y]+value−sum[x]#include <iostream>using namespace std;const int maxn = 200010;int n, m;int ...原创 2019-06-19 21:00:38 · 152 阅读 · 0 评论 -
【带权并查集】 --hdu3635
题目来源:hdu 3635 Dragon BallsSample Input23 3T 1 2T 3 2Q 23 4T 1 2Q 1T 1 3Q 1Sample OutputCase 1:2 3 0Case 2:2 2 13 3 2note部分:在unite之前,会进行find(1)操作,此时要进行路径压缩,先找到父结点tf=father[1]...原创 2019-06-19 18:00:33 · 198 阅读 · 0 评论 -
【带权并查集】-- poj1988
题目来源:poj 1988 Cube Stacking#include <iostream>using namespace std;const int maxn = 30010;int father[maxn]; //父亲数组int son[maxn]; //包括第i个结点在内的其子树结点的个数int dis[maxn]; //表示第i个结点到根节点的距离/...原创 2019-06-18 19:48:36 · 140 阅读 · 0 评论 -
【带权并查集】
文章目录统计带权并查集在并查集的基础上,对其中的每一个元素赋有某些值。在对并查集进行路径压缩和合并操作的时候,这些权值具有一定属性,即可将他们与父结点的关系,变化为与所在树的根结点关系。统计poj 1988 Cube Stacking...原创 2019-06-18 19:46:42 · 81 阅读 · 0 评论 -
【简单并查集】 --poj2236
题目来源:poj 2236 Wireless Network注意:在合并时,我们只需要考虑这台电脑与之前已经修复的电脑能够通讯。设置一个vis数组。#include <iostream>using namespace std;const int maxn = 1010;int father[maxn]; //父亲数组int height[maxn]; //树的高度...原创 2019-06-18 15:23:10 · 179 阅读 · 0 评论 -
【并查集】
并查集的定义并查集是一种维护集合的数据结构。并查集的每一个集合都是树。它支持两个操作:合并:合并两个集合查找:判断两个元素是否属于一个集合并查集是用数组实现的。int father[i]; //father[i]表示元素i的父亲节点对同一个集合来说,只存在一个根结点,且将其作为所属集合的标识。并查集的基本操作int father[maxn]; //父亲数组...原创 2019-06-18 09:47:57 · 71 阅读 · 0 评论 -
【拓扑排序】
有向无环图如果一个有向图的任意顶点都无法通过一些有向边回到自身,那么称这个有向图为有向无环图。拓扑序如果图中从VVV到WWW有一条有向路径,则VVV一定排在WWW之前。满足此条件的顶点序列称为一个拓扑序。拓扑排序获得一个拓扑序的过程就是拓扑排序。...原创 2019-06-23 15:20:03 · 69 阅读 · 0 评论 -
【最小生成树算法】 --Prim算法 poj2485
题目来源:poj 2485题意:求最小生成树中的最大边#include <iostream>#include <string>#include <cstring>using namespace std;const int maxn = 2010;int G[maxn][maxn];const int INF = 0x3fffffff;bool...原创 2019-06-23 14:19:37 · 92 阅读 · 0 评论 -
【最小生成树】 -- Prim算法 poj1789
题来源:poj 1789emmmm…注意松弛条件那和Dijkstra算法区分…WA了好几次…#include <iostream>#include <string>#include <cstring>using namespace std;const int maxn = 2010;int G[maxn][maxn];string str[max...原创 2019-06-23 14:05:11 · 98 阅读 · 0 评论 -
【最小生成树】 --Kruskal算法 poj2031
题目来源:poj 2031思路:依次计算两个球体球心之间的距离,如果距离小于或者等于两个球体半径的大小,则设两个球体的距离为0。否则为两个球体球心的距离减去两个球体半径之和。#include <iostream>#include <algorithm>#include <cmath>using namespace std;const int m...原创 2019-06-23 10:08:00 · 118 阅读 · 0 评论 -
【Kruskal算法】 -- poj1287
题目来源: poj 1287题意:连通一个图,找最小权值和,有重边要点:因为有重边,所以Prim算法还要取最小的边加入,而Kruskal算法可以直接忽略这个问题,因为一开始要排序,大的自动舍掉了。#include <iostream>#include <algorithm>using namespace std;const int maxn = 100;c...原创 2019-06-23 09:01:34 · 132 阅读 · 0 评论 -
【最小生成树】 --Kruskal算法 poj 1251
题目来源:poj 1251#include <iostream>#include <algorithm>using namespace std;const int maxn = 100;const int maxm = 5010;int n;struct edge{ int u, v; int w; edge() {} edg...原创 2019-06-23 08:42:48 · 127 阅读 · 0 评论 -
最小生成树算法
Prim算法:从一个根节点开始,让一颗小树慢慢长大。输入:图G=(V,E,W),V={1,2,...,n}G=(V,E,W),V=\{1,2,...,n\}G=(V,E,W),V={1,2,...,n}输出:最小生成树TTT设计思想:初始S={1}S = \{1\}S={1}选择连接SSS与V−SV-SV−S集合的最短边e={i,j}e=\{i,j\}e={i,j},其中iϵ...原创 2019-06-22 21:37:13 · 100 阅读 · 0 评论 -
【Floyd算法】 -- poj 1125
题目来源:poj 1125 股票经纪人思路:先用Floyd算法求出全局最短路径。然后遍历每一行分别求出从1到N作为第一个人开始散播消息所需时间(最长时间),再求出这些所有时间中的最短时间。#include <iostream>using namespace std;const int maxn = 110;const int INF = 0x3fffffff;int...原创 2019-06-18 08:46:48 · 169 阅读 · 0 评论 -
【Floyd算法】-- 求传递闭包
题目来源:poj 3660 Cow Contest题目让确定有几个人的位置是确定的,如果一个点有x个点能到达此点,从该点出发能到达y个点,若x+y=n−1x+y=n-1x+y=n−1,则该点的位置是确定的。用Floyd算法算出每两个点之间的距离,最后统计时,若dis[a][b]dis[a][b]dis[a][b]之间无路且dis[b][a]dis[b][a]dis[b][a]之间无路,则该点位置...原创 2019-06-17 21:20:43 · 380 阅读 · 0 评论 -
【SPFA算法】 -- 差分约束系统
题目来源: poj 3169 Layout思路:#include <iostream>#include <vector>#include <algorithm>#include <queue>using namespace std;const int maxn = 10010;const int INF = 0x3fffffff;...原创 2019-06-17 19:39:31 · 149 阅读 · 0 评论 -
【最短路径算法】 -- SPFA(Shortest Path Faster Algorithm)
SPFA是优化的Bellman-Ford算法Bellman-Ford算法每轮操作都要遍历所有的边,这其中有许多无效的操作。只有当某个顶点u的d[u]值改变时,从它出发的边的邻接点v的d[v]值才有可能被改变。SPFA算法的伪代码queue<int> q;源点s入队;while(队列非空){ 取出队首元素; for(u的所有邻接边u->v) { if(...原创 2019-06-17 10:10:57 · 260 阅读 · 0 评论 -
【Dijkstra算法】-- 复杂建图 poj 2502 Subway
题目来源:poj 2502 Subway思路:计算任意两个站点之间的距离。但是这里有地铁距离和步行距离,先计算地铁距离,即一条地铁线的点之间所需时间,再计算所有点之间的步行时间,与之前算的地铁距离作比较,取小的那个。#include <iostream>#include <cmath>using namespace std;const int maxn = ...原创 2019-06-17 09:49:14 · 104 阅读 · 0 评论 -
【Bellman-Ford算法】--判断正环poj 2240套利
题目来源: poj 2240此题与poj1860相似。#include <iostream>#include<string>#include <map>using namespace std;const int maxn = 40;const int maxm = 10000;struct node{ int u, v; d...原创 2019-06-16 21:43:30 · 327 阅读 · 0 评论 -
【Bellman-Ford算法】--判断是否存在正环(求最长路径)
题目来源:poj 1860#include <iostream>using namespace std;const int maxn = 1010;const int maxm = 110;struct edge{ int u; int v; double rate; double cost;} edge[2 * maxm];int N...原创 2019-06-16 20:37:58 · 754 阅读 · 0 评论 -
【有负权边的最短路问题】- Bellman-Ford算法
文章目录Bellman-Ford算法Bellman-Ford算法可以解决单源最短路问题也可以处理有负权边的情况考虑环零环和正环的存在不能使最短路径更短;如果图中有负环且从源点可以到达,那么就会影响最短路径的求解。...原创 2019-06-14 11:52:14 · 2316 阅读 · 0 评论 -
【Dijkstra变形】-- 通路中最小边
题目来源:poj 2253 Frogger题目描述:题目描述了两只青蛙,第一只青蛙向努力跳到第二只青蛙那里去,位置是按坐标给的。中间可能有一些介质石头,我们要计算的是,为使青蛙跳到目的地,其所需要的跳跃距离的最小值。与这题通路中最大边十分相似思路:松弛条件:选取X集合外条约距离最小的点加入X集合,假设现在选取点u加入X集合,更新点v时—— d[v]=min(d[v],max(d[u...原创 2019-06-10 21:22:04 · 1590 阅读 · 0 评论 -
[Dijkstra]--通路中最大边
题目来源:poj 1797题目大意:有一张无向图,n(1<=n<=1000)个顶点,m条边,没有重边。每条边都有载重限制,求从点1到点n的一条路径,使得载重最大,输出该重量。解题思路:首先要注意这道题和网络流最大流问题的区别,初学者可能会有点晕:网络流可以由多条路径流到汇点,但这道题只有一条路径!单源,单路径,那么就用Dijkstra算法啦,只不过需要改变下松弛条件:以前是选取...原创 2019-06-10 19:43:51 · 175 阅读 · 0 评论 -
[Dijkstra算法]--堆优化Dijkstra
这个一直报错#include <iostream>#include <algorithm>#include <queue>#include <vector>using namespace std;const int maxn = 1000005;const int INF = 0x3fffffff;bool vis[maxn] = {...原创 2019-06-10 18:24:50 · 564 阅读 · 0 评论 -
Dikstra +有重边
题目来源:poj 2387坑:有重边#include <iostream>#include <vector>using namespace std;const int maxn = 1010;const int INF = 0x3ffffff;int G[maxn][maxn];bool vis[maxn] = {false};int dis[maxn];...原创 2019-06-08 09:44:39 · 203 阅读 · 0 评论 -
[变形Dijkstra]-加了边权的Dijkstra
题目来源:PAT A1030 Travel Plan题意:有N个城市(编号0-N-1),M条道路(无向边),并给出M条道路的距离属性与花费属性。现在给定起点S和终点D,求从起点到终点的最短路径,最短距离及花费。注意:如果有多条最短路径,则选择花费最小的那条。#include <iostream>#include <algorithm>#include <...原创 2019-06-08 08:53:20 · 138 阅读 · 0 评论 -
[Dijkstra+DFS]PAT A1030 Travel Plan
题目来源:PAT A1030 Travel Plan题意:有N个城市(编号0-N-1),M条道路(无向边),并给出M条道路的距离属性与花费属性。现在给定起点S和终点D,求从起点到终点的最短路径,最短距离及花费。注意:如果有多条最短路径,则选择花费最小的那条。#include <iostream>#include <algorithm>#include <...原创 2019-06-08 08:49:51 · 163 阅读 · 0 评论 -
[变形Dijkstra]-加了点权的Dijkstra
题目来源:PAT A1003 Emergency题目大意:给出N个城市,M条无向边。每个城市中都有一定数目的救援小组,所有边的边权已知。现在给出起点和终点,求从起点到终点的最短路径条数及最短路径上的救援小组之和。如果有多条最短路径,则输出数目之和最大的。#include <iostream>#include <algorithm>using namespace s...原创 2019-06-07 17:42:36 · 289 阅读 · 1 评论 -
[最短路径]-变形Dijkstra
如果题目中遇到两条最短距离一样的最短路径,那么这个时候会再给出一个第二标尺(第一标尺是距离)。给每条边再加一个边权(比如花费),要求在最短路径有多条时要求路径上的花费之和最小。给每个点增加一个点权(比如每个城市能收集到的物资),然后在最短路径有多条时要求路径上的点权之和最大。加了点权的Dijkstra直接求出有多少条最短路径。...原创 2019-06-07 17:25:27 · 175 阅读 · 0 评论 -
[Dijkstra算法]-poj 3268正反两次最短路(矩阵转置)
思路:本来考虑去的时候想用多次调用Dijkstra,求不同地方到party地点的最短距离。看了别人的思路,,可以将距离矩阵转置这样源和终点互换了,可以只调用一次Dijkstra了。再求从party地点回来,也只需要调用一次Dijkstra。...原创 2019-06-07 17:13:50 · 314 阅读 · 0 评论 -
[最短路径算法]-Dijkstra
题目来源:poj 1502 #include <iostream>#include <sstream>#include <vector>using namespace std;const int maxn = 110;const int INF = 0x3fff;int G[maxn][maxn];bool vis[maxn] = {false}...原创 2019-06-07 15:56:24 · 196 阅读 · 0 评论 -
[Dijkstra算法]
题目链接:poj 1847 Tram有n个点,这些点和其他点有些路径,每个点是一个开关,开关只能有一个方向走一条路,而第一个数就是默认的开关指向,不用旋转。题目给的实例3 2 1 //有3个开关点,计算从第二个到第一个最少需要旋转几次2 2 3//第1个开关可以通向2 和3 ,通向2不需要旋转,通向3需要旋转1次2 3 1//第2个开关可以通向3 和1, 通向3不需要旋转,通向1需要旋转...原创 2019-06-07 15:05:00 · 104 阅读 · 0 评论 -
[Dijkstra算法]-有限制+反向建图
题目来源:poj1062 昂贵的聘礼解题思路最短路径——Dijkstra算法反向建图引入了一个超级结点0号。等级限制的处理采用枚举,依次把1-N号结点作为等级最低的结点,如果有结点的等级比当前循环的iii号结点低,或者有结点的等级比当前循环的iii号结点的等级大超过M都是不合法的。设置vis[j]=truevis[j]=truevis[j]=true,相当于从图中把...原创 2019-06-07 13:54:18 · 535 阅读 · 0 评论 -
[最短路径算法-Dijkstra算法]邻接矩阵版
Dijkstra算法Dijkstra算法用来解决单源最短路问题。即给定图G和起点s,通过算法得到S到达其他每个顶点的最短距离。Dijkstra算法的基本思想是对图G(V,E)设置集合S,存放已被访问的顶点,然后每次从集合V-S中选择与起点s距离最小的一个顶点(u),访问并加入集合S。之后,令u为中介点,优化起点s与所有从u能到达的顶点v之间的最短距离。这样的操作执行n次(n为顶点个数),...原创 2019-06-07 08:47:28 · 957 阅读 · 0 评论