图论
mlm5678
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
A* 寻路算法
简易地图 如图所示简易地图, 其中绿色方块的是起点 (用 A 表示), 中间蓝色的是障碍物, 红色的方块 (用 B 表示) 是目的地. 为了可以用一个二维数组来表示地图, 我们将地图划分成一个个的小方块 二维数组在游戏中的应用是很多的, 比如贪吃蛇和俄罗斯方块基本原理就是移动方块而已. 而大型游戏的地图, 则是将各种"地貌"铺在这样的小方块上.寻路步骤 ...转载 2020-04-20 17:54:11 · 425 阅读 · 0 评论 -
hdu 1232
#include<cstdio>#include<iostream>using namespace std;const int maxn=1010;int pre[maxn];int cnt;int n,m;void init(){ for(int i=0; i<=n; i++) pre[i]=i; cnt=n-...原创 2020-03-07 00:33:08 · 218 阅读 · 0 评论 -
hdu oj 1102(Kruskal)
分析: 已经有n个村修好了路,问打通所有村庄的最小生成树,拿merge中的mark判断一下是否在树中#include<algorithm>#include<iostream>#include<vector>#include<bits/stdc++.h> #define maxn 110using namespace std...原创 2020-03-06 23:39:49 · 208 阅读 · 0 评论 -
hdu oj 1102(prim)
分析:裸的最小生成树,没什么好说的.#include<iostream>#include<string.h>#include<math.h>#include<bits/stdc++.h>#define INF 0x3f3f3f3f#define N 110using namespace std;int n,ans;...原创 2020-03-05 00:23:59 · 195 阅读 · 0 评论 -
hdu1325 Is It A Tree?
题意:有向图判断是不是一棵树分析:你管他有向图还是无向图呢,什么吐跟并查集有关系吗。甭管他,分析完提后裸并查集.#include <iostream>#include<bits/stdc++.h>#include<string.h>#include<math.h>#define N 11000 using names...原创 2020-03-02 23:05:16 · 177 阅读 · 0 评论 -
hdu 1856 More is better
题意:给出n对朋友,求出最大的朋友圈。 最后输出那个对应的值,注意一个小问题,如果 n 是 0 的话,那么每个组都是一个人,那么就是说,输出值是 1#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#inc...原创 2020-03-02 22:38:54 · 160 阅读 · 0 评论 -
图论500题
=============================以下是最小生成树+并查集======================================【HDU】1213 How Many Tables 基础并查集★1272 小希的迷宫 基础并查集★1325&&poj1308 Is It A Tree? 基础并查集★1856 More i...转载 2020-03-02 22:23:39 · 234 阅读 · 0 评论 -
CCF认证 2017-12 商路(自底向上的拓扑序)
因为要计算一个城市接下来通向哪里可以取得最大值,必须知道所有下级城市的商路能取得的最大值(我是这么认为的)最下级城市的价值一定为0(已知),已知最大价值后就可以计算所有上级直接通向这里可以得到的价值,取最大的那个(保存在一个数组ans里)如果一个城市的所有直接下级都处理过了,那么它的最大价值就已知了,就可以计算它的上级直接通向它能取得的价值所以要从下级向上级计算,再用类似拓扑排序的方法...原创 2019-03-11 19:04:07 · 517 阅读 · 0 评论 -
对比 Dijkstra Bellman—Ford Spfa 最短路之间区别
算法名称 能否处理负权边 时间复杂读 Dijkstra 因为核心算法是贪心, 所以不能处理负边权 o(n^2) Bellman—Ford 能,只要不是负环即可 o(mn) Spfa 能,本质是队列优化的 Bellman—Ford, 负环只会增加出入队列次数 o(km)~o(nm) ...原创 2019-03-16 12:34:17 · 722 阅读 · 0 评论 -
强连通算法--Tarjan的缩点及染色
Tarjan算法相当于在一个有向图中找有向环,那么我们Tarjan算法最直接的能力就是缩点辣!缩点基于一种染色实现,我们在Dfs的过程中,尝试把属于同一个强连通分量的点都染成一个颜色,那么同一个颜色的点,就相当于一个点。比如刚才的实例图中缩点之后就可以变成这样:将一个有向带环图变成了一个有向无环图(DAG图)。很多算法要基于有向无环图才能进行的算法就需要使用Tarjan算法实现染色缩点,建...原创 2018-10-13 21:49:25 · 510 阅读 · 0 评论 -
强连通算法--Tarjan个人理解+详解
与其说是我写的,不如说是我抄的https://blog.youkuaiyun.com/mengxiang000000/article/details/51672725tarjan用来求强连通分量的!说白了就是 A到B,B到了到不了A。运用了dfs,堆栈的知识讨论如何用Tarjan算法求强连通分量个数:假设我们要先从0号节点开始Dfs,我们发现一次Dfs我萌就能遍历整个图(树),而且...原创 2018-10-13 18:34:48 · 502 阅读 · 0 评论 -
trajan 算法 离线求lca
Tarjan算法的优点在于相对稳定,时间复杂度也比较居中,也很容易理解。 下面详细介绍一下Tarjan算法的基本思路: 1.任选一个点为根节点,从根节点开始。 2.遍历该点u所有子节点v,并标记这些子节点v已被访问过。 3.若是v还有子节点,返回2,否则下一步。 4.合并v到u上。 5.寻找与当前点u有询问关系的点v。...原创 2019-04-23 01:56:47 · 427 阅读 · 0 评论 -
Dinic & 当前弧优化
Dinic的核心思想就是先跑一遍Bfs BfsBfs,为每个位置设置一个高度,一个点的高度为前一个点+1 +1+1(如果某一条边已经满流则不设置)为什么非得要用bfs建立分层图 解释: 虽然说我们已经知道了增广路的实现,但是单纯地这样选择可能会陷入不好的境地,比如说这个经典的例子: 我们一眼可以看出最大流是999(s->v-&g...原创 2019-05-02 16:29:10 · 1464 阅读 · 0 评论 -
The 16th Zhejiang Provincial Collegiate Programming Contest J(Welcome Party)
n个人,m组朋友关系,朋友关系不传递。安排n个人的进屋顺序,若进屋时,屋内没有其朋友,就会不高兴,求不高兴的人数最小的情况下,进入屋子的最小字典序顺序。思路:并查集+优先队列,朋友关系是双向的,不开心的人的数量就是关系图的块数,每个块,需且只需一个人不开心,剩下的人都可以通过关系一个个进屋,不至于不开心,所以并查集判断关系分块,选定不开心的人为下标最小的,让其成为块内最早进屋的,由此决定字典序...原创 2019-05-03 10:59:00 · 277 阅读 · 0 评论 -
Kosaraju算法
最关键通用部分:强连通分量一定是图的深搜树的一个子树。Kosaraju算法1.算法思路基本思路:这个算法可以说是最容易理解,最通用的算法,其比较关键的部分是同时应用了原图G和反图GT。(步骤1)先用对原图G进行深搜形成森林(树),(步骤2)然后任选一棵树对其进行深搜(注意这次深搜节点A能往子节点B走的要求是EAB存在于反图GT),能遍历到的顶点就是一个强连通分量。余下...原创 2019-05-09 14:53:39 · 2806 阅读 · 1 评论 -
NEUQ 今天又是开花的一天
今天又是开花的一天题目描述大师兄!不好了,师父又被妖怪抓走了!!!师父被boss抓到了迷宫坐标(n,m)(n,m)的地点,大师兄位于在(1,1)(1,1)的迷宫起始点,他想要去营救师父,但是今天的boss很凶险,他需要保持尽量多的体力来和boss战斗。对于这个n*mn∗m的迷宫,其任意的一个坐标,00对应 空地,11对应障碍物,22对应怪兽,33对应药瓶, 大师...原创 2019-05-09 19:10:00 · 266 阅读 · 0 评论 -
奇异旅馆 【并查集+树状数组】
奇异旅馆Time Limit : 3000/1000ms (Java/Other)MemoryLimit : 65535/32768K (Java/Other)Total Submission(s) : 29Accepted Submission(s) :15Problem Description玩了一天,小A又带着他的小伙伴们来到了当地的奇异旅馆。这个旅馆共有n层...原创 2019-05-21 01:18:10 · 368 阅读 · 0 评论 -
2019CCPC河北省赛 L smart robot
就纯纯的跑dfs,只不过就是得分析分析题面#include<iostream>#include<bits/stdc++.h>#include<queue>#include<set>using namespace std;const int maxn=62;int dx[4]={0,0,-1,1};int dy[4]={1,-1,0...原创 2019-05-26 20:42:08 · 603 阅读 · 5 评论 -
2019ccpc河北省赛 A Battle of Balls
行了这是个裸的判联通的题,dfs bfs 并查集均可这是并查集的做法#include <bits/stdc++.h>using namespace std;const double eps = 1e-8;const int maxn = 1e3 + 10;int sgn(double x) { if (fabs(x) < eps) return 0; ...原创 2019-05-26 21:28:52 · 723 阅读 · 0 评论 -
CCPC-Wannafly Winter Camp Day5 (Div2, onsite) H Nested Tree 树形dp
题解 大佬那抄的https://blog.youkuaiyun.com/CaprYang/article/details/86631935#include<iostream>#include<bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const...转载 2019-01-26 00:38:00 · 216 阅读 · 0 评论 -
CCF-CSP—2017.12.—4 行车路线(SPFA变形 与dij)
题目描述:问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航。 小芳将可能的道路分为大道和小道。大道比较好走,每走1公里小明会增加1的疲劳度。小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增加s2的疲劳度。 例如:有5个路口,1号路口到2号路口为小道,2号路口到3号路口为小道,3号路口到4号路口为大道,4号路口到5号路口为小道,相邻路口之间的距离都是2公...原创 2019-03-11 17:18:24 · 456 阅读 · 0 评论 -
CCF认证 交通规划
试题名称: 交通规划问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统。 建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改造成高速铁路。现在,请你为G国国王提供一个方案,将现有的一部分铁路改造成高速铁路,使得任何两个城市间都可以通过高速铁路到达,而且从所有城市乘坐高速铁路到首都的最短路程和原来一样...转载 2019-03-15 15:40:30 · 239 阅读 · 0 评论 -
历届试题 大臣的旅费 (树的直径 flody & dfs)
问题描述很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。J是T国重要大臣,他巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了...原创 2019-03-07 22:01:52 · 135 阅读 · 0 评论 -
HDU 1874 畅通工程续(dij priority_queue)
#include<iostream>#include<queue>#include<algorithm>#include<cstdio>#include<stdlib.h>//#include<bits/stdc++.h>using namespace std;const int maxn=1000+10;...原创 2019-02-27 19:25:32 · 181 阅读 · 0 评论 -
2n皇后问题(vector版)不算太low
两次dfs。一样的方式,一样的味道!其实对于vector传参来说,可以不加&,但还是加上吧,别弄幺蛾子#include<iostream>#include<bits/stdc++.h>#include<vector>#include<math.h>using namespace std; int cnt=0;int ...原创 2019-02-08 21:12:12 · 258 阅读 · 0 评论 -
2n皇后问题(邻接矩阵建图)tolow
给定⼀个n*n的棋盘,棋盘中有⼀些位置不能放皇后。现在要向棋盘中放⼊n个⿊皇后和n个⽩皇后,使任意的两个⿊皇后都不在同⼀⾏、同⼀列或同⼀条对⻆线上,任意的两个⽩皇后都不在同⼀⾏、同⼀列或同⼀条对⻆线上。问总共有多少种放法?n⼩于等于8。接下来n⾏,每⾏n个0或1的整数,如果⼀个整数为1,表示对应的位置可以放皇后,如果⼀个整数为0,表示对应的位置不可以放皇后。输出格式输出⼀个整数,表...原创 2019-02-08 17:49:55 · 587 阅读 · 0 评论 -
POJ1659 Frogs' Neighborhood(可图havel定理)
Description未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N)。如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居。现在已知每只青蛙的邻居数目x1, x2, ..., xn,请你给出每两个湖泊之间的相连关系。Input第一行是测试数据的组数T(0 ≤ T ≤ 20)。每组数据包括两行,第一...原创 2019-02-06 00:44:42 · 226 阅读 · 0 评论 -
CCPC-Wannafly Winter Camp Day5 (Div2, onsite)
#include<bits/stdc++.h>using namespace std;#define MAXN 100501struct NODE{ int w; int e; int next; //next[i]表示与第i条边同起点的上一条边的储存位置}edge[MAXN];int cnt;int head[MAXN]; void add(int u,int ...原创 2019-01-25 03:07:14 · 184 阅读 · 0 评论 -
CCPC-Wannafly Winter Camp Day5 (Div2, onsite)
题目描述你有一棵树,你想把它画在平面上,使得没有边相交。输入描述第一行两个整数n,m(1≤n≤1000,1≤m≤2000),表示点数和边数。接下来m行,每行两个正整数u,v(1≤u,v≤n,u!=v),保证不存在重边。输出描述输出n行,每行两个整数xi,yi(1≤xi,yi≤n),表示将第ii个点画到(xi,yi)的位置,要求图中的每对边如果有公共点,那么只能在...转载 2019-01-25 00:51:20 · 174 阅读 · 0 评论 -
图论建图
1.邻接表建图: 直接开一个N*N的矩阵如果i,j相连则将二维矩阵赋值,否则则为INF。 虽然简单直观但是遍历效率过低, “并且不能存储重边”。 遇到点较稀疏的图时空间利用率过低,时间复杂度为O(N*N)#include<iostream>#include<algorithm>#include<vecto...原创 2018-12-16 20:34:37 · 275 阅读 · 0 评论 -
zzuli 1787: 生化危机 (bfs与dfs)
1787: 生化危机DescriptionX博士想造福人类, 研发一种可以再生肢体的药物, 可是很不幸......研究失败了, 他在蜥蜴身上实验的时候, 蜥蜴发生了变异, 更糟糕的是, 蜥蜴逃出了生化实验室.恐怖的事情发生了, 疫情以X博士所在的城市为中心向四周扩散开, 最终, 整个地球上的城市都被感染了.假设整个地球一共有N个城市, 这N个城市是连通的, 有N-1条通道把他们连接起来.病...原创 2018-12-20 21:59:10 · 479 阅读 · 0 评论 -
P3385 【模板】判负环(BFS 跑SPFA)
题目描述暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索寻找一个从顶点1所能到达的负环,负环定义为:一个边权之和为负的环。输入输出格式输入格式:第一行一个正整数T表示数据组数,对于每组数据:第一行两个正整数N M,表示图有N个顶点,M条边接下来M行,每行三个整数a b w,表示a->b有一条权值为w的边(若w<0则为单向,否则双向)输出...原创 2019-02-28 19:46:05 · 269 阅读 · 0 评论 -
P3385 【模板】判负环(DFS 跑SPFA)
既然我们只需要判断负环,那么就相当于我们需要找到一条权值和为负的回路。既然我们只需要找到权值和为负的回路,那不妨使距离数组d初始化为0。这样处理后,第一次拓展只会拓展到与起点相连边权为负的边。那么我们就分别枚举所有的点作为起点,如果已经找到一个负环就不再继续枚举。根据SPFA,我们找到的负环一定包含当前枚举的这个点。(因为这个点出现了两次啊)正确性相当的显然。--#in...原创 2019-02-28 20:31:59 · 257 阅读 · 0 评论 -
P3385 【模板】负环(bellman_ford法)
关于这道题目,首先想到的便是SPFA,这个算法的时间复杂度是O(KM),其中K是每个点平均入队次数,M是边数,然鹅,如果有负环,那末K会等于顶点数,时间复杂度为O(NM)。so,这样的时间复杂度和Bellman-Ford的时间复杂度是一样的,所以我们直接用简单的多的Bellman-Ford来做就可以了。下面上代码:#include <stdio.h>inline void B...原创 2019-02-28 20:50:29 · 310 阅读 · 0 评论 -
树的直径 dfs bfs floyd
dfs的核心代码void dfs(int s){ for(int i = head[s]; i != -1; i = edge[i].nxt){ int Eiv = edge[i].v; if(fa[s] == Eiv) continue; //不走回头路,也可以递归父亲结点省去fa数组空间 fa[Eiv] = s; ...原创 2019-03-07 20:08:08 · 228 阅读 · 0 评论 -
hdu 4514 树形DP求树直径
#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#转载 2019-03-07 18:07:39 · 208 阅读 · 0 评论 -
hdu 4514 树形DP求树直径
在一个n各节点,n-1条无向边的无向图中,求图中最远两节点的距离,将这个图看作无根树,求的是树直径树形dp求树的直径我们不妨设1号点为根节点,那么这就可以看做一棵有根树。设D[x]表示从节点x出发,往以x为根的子树走,能够到达的最远距离。设x的子节点分别为y1,y2,y3,...,yt,edge(x,y)表示从x到y的边权,则可以得到状态转移方程: D[x]=max{D[yi]...原创 2019-03-07 17:08:49 · 422 阅读 · 0 评论 -
CCF CSP[201703-5] 引水入城(dij 模拟最大流)
思路:题目是一个最大流问题,可以转化为最短路问题。#include<iostream>#include<queue>#define N 5050#include<string.h>#include<algorithm>#include<bits/stdc++.h>using namespace std;int n,m;...转载 2019-03-14 21:37:09 · 512 阅读 · 0 评论 -
CCF201703-4 地铁修建(最小生成树+并查集)
问题描述试题编号: 201703-4试题名称: 地铁修建时间限制: 1.0s内存限制: 256.0MB问题描述: 问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号到n号枢纽间修建一条地铁。 地铁由很多段隧道组成,每段隧道连接两个交通枢纽。经过勘探,有m段隧道作为候选,两个交通枢纽之间最多只有一条候选的隧道,...原创 2019-03-14 19:15:52 · 260 阅读 · 0 评论 -
历年真题 九宫重排(BFS)
问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。 我们把第一个图的局面记为:12345678. 把第二个图的局面记为:123.46758 显然是按从上到下,从左到右的顺序记录数字,空格记为句点。 本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以...转载 2019-03-04 20:47:42 · 405 阅读 · 0 评论
分享