![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 77
姬小野
这个作者很懒,什么都没留下…
展开
-
回溯-八皇后问题
八皇后问题是经典的回溯问题 常用的方法是递归, 也可以暴力枚举 知乎上有用一行代码写的我刚接触算法时翻过紫书, 那时了解的知识太少了, 一次翻到八皇后问题, 觉得这好复杂, 怎么做得出来! 于是心里自我暗示地告诉自己这道题很难.直到今天在计蒜客上看视频时, 提到了八皇后问题, 鉴于视频上内容较基础, 我想是不是八皇后问题其实并不难?翻书之后, 以我现在的能力还是无法独立思考出, ...原创 2018-01-24 21:48:55 · 571 阅读 · 0 评论 -
无线通讯网_去边最小生成树
P1991 无线通讯网 传送门题目描述国防部计划用无线网络连接若干个边防哨所。2 种不同的通讯技术用来搭建无线网络;每个边防哨所都要配备无线电收发器;有一些哨所还可以增配卫星电话。 任意两个配备了一条卫星电话线路的哨所(两边都ᤕ有卫星电话)均可以通话,无论他们相距多远。而只通过无线电收发器通话的哨所之间的距离不能超过 D,这是受收发器 的功率限制。收发器的功率越高,通话距离 D ...原创 2018-07-28 12:27:41 · 327 阅读 · 0 评论 -
最短路计数_SPFA
P1144 最短路计数 传送门题目描述给出一个 NN 个顶点 MM 条边的无向无权图,顶点编号为 1-N1−N 。问从顶点 11 开始,到其他每个点的最短路有几条。输入输出格式输入格式: 第一行包含 22 个正整数 N,MN,M ,为图的顶点数与边数。接下来 MM 行,每行 22 个正整数 x,yx,y ,表示有一条顶点 xx 连向顶点 yy 的边,请注意可能有自环与重边。...原创 2018-07-28 13:30:10 · 490 阅读 · 1 评论 -
CCF201709-4通信网络_双向DFS
这题一看, 如果不考虑时间的话, 用floyd算法求传递闭包和对称闭包是可以解决的, 但是题目的数据只够过60分, 正解显然不是这样.然后我又思考, 开始往复杂了想, 于是有了下面的不知对错的思路: 先判断图是否连通,否则结果为0 用tarjan算法缩点, 把环全都合成一个结点,他们的处境是一样的 找到一个入度为0的结点,(缩点之后一定存在), 它会指向好几个点, 找出...原创 2018-08-06 09:39:00 · 744 阅读 · 0 评论 -
CCF 201509-4 高速公路_Tarjan算法
CCF 201509-4 高速公路 传送门这道题基本算是裸的Tarjan算法了, 只要求出每个强连通分量, 然后根据这些分量的元素数计算便利城市对即可, 数据也没有优化的坑. 会Tarjan算法的人大概会在考场上大呼简单, 但不会的人恐怕只有0分了, 说明CCF认证还是需要一定量的算法知识的.第一稿只得了80分. 找了很多博客对比, 期间发现他们很多人, 一个简单的Tarjan算法写的那么...原创 2018-08-10 21:19:05 · 305 阅读 · 3 评论 -
CCF 201703-4 地铁修建_最小生成树
自己独立思考出这道题, 而且正解思路是一遍过, so 嗨皮.贴一下思路历程, 思考的过程是很珍贵的. 对一个问题, 从陌生到有一个大致的了解, 其中会有错误的思路, 发现错误然后及时回头去想其他的方法. 有时有能做出结果的思路但不是最好的思路, 从差方法上进行横向拓展, 突然灵机一动, 想到另一种方法, 最后解答出来.以下初印象: 这像是一道DAG最长路或者说关键路径题目,但是又很...原创 2018-08-06 23:38:04 · 312 阅读 · 0 评论 -
CCF 201503-4 网络延时_两种方法
CCF 201503-4 网络延时 传送门初看题: 这不就是多源最短路径里长度最大的? floyd? 不过看数据,这样只能过70%的数据,正解肯定不是这样. 写了份floyd交上去, 70分. 这说明出题人特别仁慈, 给了这么多放水的数据, 可是这样是不是太不公平?但是什么是正解呢? 1 ≤ n ≤ 10000,1 ≤ m ≤ 10000, 这么大个数据,肯定得从题目的特殊性下手思考...原创 2018-08-11 14:03:47 · 951 阅读 · 1 评论 -
CCF 201503-5 最小花费
CCF 201503-5 最小花费 传送门毕竟是个蒟蒻, 所以这CCF-CSP第五题也只能用用O(nm)的算法暴力去解了, 而且常数还TM很大. 得了30分, 也算是出题人放了个小水.用DFS找到两端点的路径, 同时存储边的长度. O(n)对每一条路径点判断物价大小,维持当前最小的物价,购买尽可能多的粮食直到可以走到更小的物价处注意用long long, 不然你只能得个10分咧...原创 2018-08-11 16:17:32 · 1135 阅读 · 0 评论 -
CCF 201412-4 最优灌溉_Kruskal
CCF 201412-4 最优灌溉 传送门以前的CCF第四题居然这么水, 出了一道裸的最小生成树. 写了6分钟就100分了. 光看题目, 最优灌溉, 还以为是网络流问题.辣鸡代码, 不值一看#include <algorithm>#include <iostream>#include <vector>using namespace std;...原创 2018-08-12 12:26:11 · 319 阅读 · 0 评论 -
Tarjan算法缩点+DAG最长路(DP)
第一个问题: Tarjan算法找出一个图里面的全部强连通分量(包括单独的点).第二个问题: 对每个强连通分量进行缩点, 使得此图变成一张DAG.第三个问题: 如何快速获得新图各个结点的入度出度.第四个问题: 缩点之后求解DAG最长路我们按照复杂程度来讨论不同的Tarjan算法变形的差异.第一个问题: Tarjan算法找出一个图里面的全部强连通分量(包括单独的点)....原创 2018-08-13 18:20:49 · 1544 阅读 · 0 评论 -
201803-4棋局评估_极大极小值算法_对抗搜索(转载)
问题描述 试题编号:201803-4 试题名称:棋局评估 时间限制:1.0s 内存限制:256.0MB 问题描述:问题描述 Alice和Bob正在玩井字棋游戏。 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先。当同一种棋子占据一行、一列或一条对角线的三个格...转载 2018-09-05 15:33:30 · 1633 阅读 · 0 评论 -
一句话图论算法_8种
一句话Dijkstra算法一句话SPFA算法一句话Kruskal算法一句话Prim算法一句话Tarjan算法一句话Euler回路算法一句话floyd算法一句话DAG最长路算法一句话Dijkstra算法从源点开始更新邻边,遍历到达其最近的点,以其作为新源点,重复操作直到所有点更新完毕。#include <iostream>#incl...原创 2018-09-03 13:12:06 · 415 阅读 · 0 评论 -
P1194 买礼物-最小生成树
题目描述又到了一年一度的明明生日了,明明想要买BBB样东西,巧的是,这BBB样东西价格都是AAA元。但是,商店老板说最近有促销活动,也就是:如果你买了第III样东西,再买第JJJ样,那么就可以只花KI,JKI,JK_{I,J}元,更巧的是,KI,JKI,JK_{I,J}竟然等于KJ,IKJ,IK_{J,I}。现在明明想知道,他最少要花多少钱。输入输出格式输入格式:第一行两个整数,A,...原创 2018-09-09 15:58:11 · 564 阅读 · 1 评论 -
P1119 灾后重建-省选floyd!!!
P1119 灾后重建题目背景BBB地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响。但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车。换句话说,只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄。题目描述给出BBB地区的村庄数NNN,村庄编号从000到N−1N−1N-1,和所有MMM条公路的长度,公路是双向的。并给出第iii个...原创 2018-09-15 17:51:40 · 162 阅读 · 0 评论 -
简要题解-图论-搜索-并查集-dp-树形-拓扑-tarjan等等
[USACO09NOV]找工就业Job Hunt [图论,spfa,最长路]attentions:对我而言非常好的一道题!最长路!有几个点 1、这道题转化成最长路来求解,方法和最短路类似 2、但这道题是点有正权且只有负权边,且路径为单向!那么精妙之处在于,可以将点权转化为边权!!! 3、由于题目中可能出现正环(和最短路相反!),所以需要使用SPFA(判环和最短路类似)!P26...原创 2018-09-16 10:18:02 · 355 阅读 · 0 评论 -
割点-割边(桥)模板
割点在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,就称这个点集为割点集合。注意: 1、讨论割点是在无向图中。 2、删除这个点使图的联通分量增多就是割点,所以非连通图也有割点。割边(桥)假设有连通图G,e是其中一条边,如果G-e是不连通的,则边e是图G的一条割边。此情形下,G-e必包含两个连通分支。为什么必...原创 2018-09-14 13:42:06 · 704 阅读 · 0 评论 -
CCF 201712-04 行车路线_Dijkstra变形
201712-04行车路线 传送门这看似是一个很复杂的问题, 实际上, 额…首先它有基础的最短路问题的影子,题目有20%的数据是没有小道的,可用Dijkstra算法直接求那么本着那更多的部分分的战略, 我们先写基础程序(先假设全部都是大道) OK, 初稿裸的dijkstra是20分, 那么考试的时候这20分也比较稳了, 距离满分也只有80分罢了… 罢了… 罢了…查看数据描述:...原创 2018-08-05 21:42:31 · 2287 阅读 · 7 评论 -
CCF 201512-4 送货
CCF 201512-4 送货 传送门此题只得了80分, 说是运行错误, 找了好久的bug, 都找不出哪里出错. 然后找了其他博客代码, 提交了三四个, 都是80分(他们博客上说是100分代码). 然后我想, 这应该是CCF的问题吧.这道题就是求欧拉路径.注意几点:1.一定要判断是否是连通图, 不然是错的.(判断输出点数是否为m + 1即可) 2.bool类型可以开boo[1...原创 2018-08-09 20:22:40 · 545 阅读 · 2 评论 -
P1346 电车_建图的艺术_最短路
P1346 电车 传送门 题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能)。在每个路口,都有一个开关决定着出去的轨道,每个开关都有一个默认的状态,每辆电车行驶到路口之后,只能从开关所指向的轨道出去,如果电车司机想走另一个轨道,他就必须下车切换开关的状态。 ...原创 2018-07-28 00:14:52 · 190 阅读 · 0 评论 -
半欧拉图_学画画_图论
. 参考 P1636 Einstein学画画这道题据说是半欧拉图问题. 关于半欧拉图是什么 具有欧拉回路的图称为欧拉图,具有欧拉通路而无欧拉回路的图称为半欧拉图。不过我觉得这道题有问题, 因为如果图中存在环, 或者说欧拉回路的话, 他就算错了, 不能解决这种问题.不过做了这道题还是学到了不少, 对图有了更多的理解.#include <iostream>...原创 2018-04-13 19:20:22 · 373 阅读 · 0 评论 -
倍增法求Lca(最近公共祖先)
一. 明确问题二. 思路引导三. 整体框架.步骤一步骤二步骤三步骤四完整代码一. 明确问题看标题便知道了, 这篇博客力求解决的问题是求出一棵树的两个结点的最近公共祖先(LCA), 方法是倍增法.那么什么是Lca呢? 它是一棵树上两个结点向上移动, 最后交汇的第一个结点, 也就是说这两个结点祖先里离树根最远也是离他们最近的结点.什么是倍增...原创 2018-07-16 10:51:09 · 9072 阅读 · 15 评论 -
DP_DAG最长路径_关键路径
DAG最长路DAG最长路径以i为终点的最长路径DAG最长路DAG指的是有向无环图, 求它的最长路径有一种DP方法.我们建立一个数组dp[n+1], dp[i]代表从这个结点出发的最长路径, 那么要求出dp[i], 我们只要求出从i出发的下一结点的dp[j], 使得dp[i] = max(dp[i], dp[j] + G[i][j]), 这就是它的状态转移方程....原创 2018-07-12 09:53:45 · 3692 阅读 · 0 评论 -
CCF-201403-4 无线网络
试题编号: 201403-4 试题名称: 无线网络 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上。任何两个无线路由器只要距离不超过 r 就能互相建立网络连接。 除此以外,另有 m 个可以摆放无线路由器的位置。你可以在这些位置中...原创 2018-07-18 15:53:51 · 450 阅读 · 1 评论 -
前序+中序重建二叉树
如何构建一棵二叉树?代码只有自己真正写的时候才会发现很多漏洞. 因为当我写好代码, 以为一切万事大吉的时候, 发现一切根本不是那么回事! 所有的一切都崩塌了!输入一组数据就可以构建二叉树? too young too simple ! 不过我还是那样干了, 按照书上说的插入方法, 每次传递一个数就在二叉树中插入一个数, 就这样构建起了一棵经不起考验的二叉树. 按照插入的规则找到第一个N...原创 2018-07-13 16:43:55 · 375 阅读 · 1 评论 -
二叉查找树
什么是二叉查找树?如何建立一棵二叉树?首先, 定义结构体作为树的结点的存储方式.获取数据构建二叉查找树插入函数中序遍历二叉树删除操作前驱与后继如何求得前驱和后继findMax()函数findMin()函数删除的逻辑理解完整代码什么是二叉查找树?二叉查找树是一种特殊的二叉树, 又称为排序二叉树, 二叉搜索树, 二叉排序树.递归定义如...原创 2018-07-13 23:31:48 · 200 阅读 · 0 评论 -
静态二叉树
二叉树也可以是静态的, 和指针的动态所不同的是,二叉树的静态是用结构体数组实现的, 访问指针变成了访问数组下标所在结点, 原来指针指向的位置变成了存储下标.可以说这种方法对于不了解指针的人来说是非常友好了.结构体定义:struct Node { int data, left, right;} node[maxn];昨天我使用前序和后序构建静态二叉树时, 发现按照动态的方式...原创 2018-07-14 10:06:41 · 1043 阅读 · 0 评论 -
杂物_DAG最长路_DP
P1113 杂务 传送门题目描述John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它。比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作。尽早将所有杂务完成是必要的,因为这样才有更多时间挤出更多的牛奶。当然,有些杂务必须在另一些杂务完成的情况下才能进行。比如:只有将奶牛赶进牛棚才能开始为它清洗乳房,还有在未给奶牛清洗乳房之前不能挤奶。我们...原创 2018-07-28 16:39:11 · 260 阅读 · 0 评论 -
P1330封锁阳光大学_bfs_黑白染色
洛谷P1330封锁阳光大学题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街。河蟹看到欢快的曹,感到不爽。河蟹决定封锁阳光大学,不让曹刷街。阳光大学的校园是一张由N个点构成的无向图,N个点之间由M条道路连接。每只河蟹可以对一个点进行封锁,当某个点被封锁后,与这个点相连的道路就被封锁了,曹就无法在与这些道路上刷街了。非常悲剧的一点是,河蟹是一种不和谐的生物,当两...原创 2018-07-26 11:46:23 · 294 阅读 · 0 评论 -
P1111 修复公路_并查集_Kruskal
题目背景 AA 地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。 题目描述 给出A地区的村庄数 NN ,和公路数 MM ,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路) 输入输出格式...原创 2018-07-26 20:38:26 · 760 阅读 · 0 评论 -
P1341 无序字母对_欧拉路径_字符串
传送门 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。 输入输出格式 输入格式: 第一行输入一个正整数n。 以下n行每行两个字母,表示这两个字母需要相邻。 输出格式: 输出满足要求的字符串。 如果没有满足要求的字符...原创 2018-07-27 00:03:17 · 312 阅读 · 0 评论 -
[USACO08DEC]在农场万圣节Trick or Treat on the Farm】
转载自洛谷博客-传送门题解 P2921 【[USACO08DEC]在农场万圣节Trick or Treat on the Farm】做完以后粗略翻了下题解,发现都是 TarjanTarjan 或记忆化搜索,总之逃不出 dfsdfs ,所以我就把我的非递归方法贡献一下吧。事实上,这道题用 TarjanTarjan 是大材小用了。此题不需要任何算法,两层简单的循环就能解决。首先我们需要...转载 2018-07-27 11:01:06 · 283 阅读 · 0 评论 -
CCF 201609-4 交通规划_最短路
CCF 201609-4 交通规划 传送门先放张图得瑟得瑟, 一遍过, so happy.这是一道描述非常简单的题目, 看到题目就有点小开心, 觉得肯定能做出来的.目的很清晰, 所有的点到首都的距离都是最短路, 那么最短路就要保存下来舍弃其他无用的边. 看数据范围, 就用SPFA算法了. 中心思想是记录最短路径+去除无用边关键是一条路的最短路可能会有好几条, 那么应该怎么选呢?...原创 2018-08-09 09:45:28 · 791 阅读 · 0 评论 -
P1126 机器人搬重物_复杂bfs
P1126 机器人搬重物 传送门说实话这道题蛮复杂度, 需要注意的东西比较多.如机器人是球形且有直径,它的中心是点而非方格. 所以可以选定一个方格作为机器人的位置一个障碍物直接占满一个格子,而同样因为机器人的直径问题,不能到这些格子的格点上去, 需要特殊判断在移动时机器人不能跨过障碍物,即遇到障碍物就必须停止。可用break直接实现.对于一个坐标, 可能有四个方向的情况, ...原创 2018-08-05 01:18:34 · 493 阅读 · 0 评论 -
CCF 201604-4 游戏_BFS
CCF 201604-4 游戏 传送门一看题目觉得很简单, 这不就是一道bfs水题吗? 但心里面告诉自己千万不要轻敌, 认真分析下题目先.如果按照常规的BFS思路, 会有一个bug: 因为这些障碍是在一段时间不通过,所以如果回来可能会更快. 那么这时vis数组就失效了,因为回不来…思考一下会发现, 不外乎两种情况.一种是不会回来了, 刚好可以过掉 另一种是回来反而会得到更优的解,...原创 2018-08-09 13:32:35 · 1112 阅读 · 9 评论 -
P1525 关押罪犯_并查集
P1525 关押罪犯 传送门这道题是用并查集来写的, 但普通的并查集是做不出的. 所以需要用到一些巧妙地思维.首先给边排序, 权值更大的在前面. 用贪心的思想(类似Kruskal算法)遍历边, 直到某一条边的两个顶点必须在同一个集合里面(一共只有两个集合).这题的难点就是如何判断两个顶点一定在同一个集合. 所谓敌人的敌人就是朋友, 也就是说对于一个点, 如果它此前没有敌人, 那么遇到的...原创 2018-08-05 11:29:23 · 228 阅读 · 0 评论 -
拓扑排序dfs版+判环
以前就听说拓扑排序可以用dfs来写了,只是一直没有去尝试,想一想的话会觉得很复杂,dfs怎么排?要从入度为0的点出发吗? 如果有多个入度为0的点,每个都dfs一遍吗?那他们不是会有重复不是会乱套?总之,对于从来都是用bfs写拓扑的我来说,觉得用dfs简直不可思议。但是了解之后,买毛病!精彩!而且还学会了一张图如何判环(因为有环的图是不能拓扑排序的)。总体思路就是:dfs + 栈。...原创 2018-09-15 13:30:00 · 2471 阅读 · 2 评论