随笔分类 -  图论

摘要:链接:Miku 一道很贴切的题目 这道题可以用各种修改后的图论算法等,不过单单是二分答案也是可以解决的。 检查一下对于每一个最大值,不走所有比此值大的路,看一下能不能走到终点即可 #include<iostream> #include<cstdio> #include<cstring> using 阅读全文
posted @ 2020-01-17 12:32 Simex 阅读(157) 评论(0) 推荐(0)
摘要:链接:Miku 一道很好的bfs,dfs混合练手题 这一道题看第一眼:愚蠢的bfs求最短路,有什么难的! 然后看见了一堆附加条件: 1 路径上的所有点的出边所指向的点都直接或间接与终点连通。 2 在满足条件11的情况下使路径最短 Ac 等等,与终点联通?难道我们要把每一个点dfs能不能行吗? 然而你 阅读全文
posted @ 2020-01-17 08:39 Simex 阅读(125) 评论(0) 推荐(0)
摘要:长时间不写代码了,从学校中抽身出来真的不容易啊 链接:Miku 这道题的思路就在于建反图,如果每一头牛都能到达的话,那么在反图上,这个点也一定能到达每一头牛。 那么我们的目的就明确了,找到所有能在反图上找到每一头牛的点。 #include<iostream> #include<cstdio> #in 阅读全文
posted @ 2020-01-16 22:43 Simex 阅读(134) 评论(0) 推荐(0)
摘要:链接:P1894 我觉得这道题如果去掉题面,就是一道蓝题了。 这道题还是裸的二分图匹配,用匈牙利算法就可以AC掉。 什么是匈牙利算法?匈牙利 代码几乎差不多,也不需要优化,读入比模板题还复杂点,(他们应该换一下颜色) 1 #include<iostream> 2 #include<cstring> 阅读全文
posted @ 2019-08-04 18:18 Simex 阅读(153) 评论(0) 推荐(0)
摘要:链接:P1330 一道超级大坑题。 一开始我以为是再一个无图染色,结果竟然有一对不相通的子图。 而且还有单独一个点。 这样就麻烦了 一个图染色,要求相邻的点颜色不相通,如果存在,那么把每个点的颜色颠倒也可以。 再这个图里我们就要这个做,运用bfs染色。 然而坑点就在于我们可以颠倒每一个子图的颜色,所 阅读全文
posted @ 2019-07-30 09:58 Simex 阅读(213) 评论(0) 推荐(0)
摘要:链接:P5018 这道题可以写暴力 暴力搜索,首先统计下每一个点的下属节点数,用来统计答案。 然后直接对称搜索就行 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 5 using namespace std; 6 int 阅读全文
posted @ 2019-07-29 20:07 Simex 阅读(166) 评论(0) 推荐(0)
摘要:链接:P3386 这道题要用到一个名为匈牙利算法的东西 匈牙利算法就是对于每一个点,(例如A)我们先从开始找一个点(例如B),如果他们相连,并且没有被拜访过(一个点一次只能被拜访一次),就让他们配对。然而,如果B已经和C配对了,就把C赶走,看看能不能找到一个D和C配对,如果有,就让C和D配对。让A和 阅读全文
posted @ 2019-07-29 11:11 Simex 阅读(215) 评论(0) 推荐(0)
摘要:链接:P2661 这道题有加权并查集的影子 思路还是好想的,根据特性,可以得到如果得到了一条从A到B的边后形成了环,则一定有他们的公共祖先是b。这样就明白了,然后把这个环拆成三部分,这一条边以及B到A、A到B(不加上这条边),他们的和就是长度 一定不能把A,B连起来 1 #include<iostr 阅读全文
posted @ 2019-07-29 10:30 Simex 阅读(183) 评论(0) 推荐(0)
摘要:链接:P4779 这道题卡了spfa和迪杰斯特拉朴素版 我们要使用优化版才行。 优化版是用了个堆来完成的。我们考虑一下,在初始化距离为无穷大后,对于每一个点,分成两类,一类是已经确定的,一类是没有的。对于已经确定的,我们没必要去扫描他。对于没有确定的,再分为两类,靠着一个已确定点的和没有的,那么对于 阅读全文
posted @ 2019-07-29 09:12 Simex 阅读(329) 评论(0) 推荐(0)
摘要:链接:P1195 这道题第一眼肯定能想到最小生成树,不过最小生成树最后就成了一个连通块。 哎,最后?我们想一下卡鲁斯卡尔算法,是一次加上一条边,而且这边的两端不再一个联通块中。 也就是说,我们的每一次操作,就相当于消除了一个连通块。 这样,我们在最后留下k个联通块不就可以了? 1 #include< 阅读全文
posted @ 2019-07-28 10:49 Simex 阅读(173) 评论(0) 推荐(0)
摘要:链接:P3379 【模板】最近公共祖先(LCA) 这道题我们要用到一种很神奇的东西,倍增。 首先,我们考虑一下最简单的做法,记录深度。然后先让询问的x,y中深度大的点往上爬,直到两个点深度一样结束。 然后两个点同时开始爬,当两个点相等时,就一定是公共祖先了 但是一个一个爬太慢了,怎么办呢? 我们就会 阅读全文
posted @ 2019-07-28 10:17 Simex 阅读(183) 评论(0) 推荐(0)
摘要:题目链接:P1119 简化题意: 这是一道floyed的题。但是有所不同的是,这道题里的点是有时间限制的。 所以说我们在做floyed的时候,我们不能直接枚举所有中转点,而是按照时间来进行。 以及,有可能出现询问的时候两个点没有修好,我们还要判断这个。 而且在这道题里,询问的t是不下降的,这样我们就 阅读全文
posted @ 2019-07-27 20:18 Simex 阅读(148) 评论(0) 推荐(0)
摘要:这可真是星球大战 链接: P1197 看一下这道题,如果我们正着做,每摧毁一个后就重新建图,判连通。这样肯定工程浩大且超时,我们就要换个方法了。 为什么不倒着做呢?我们先求出来最后剩下的数量,然后倒着恢复一个又一个的星球,并且重新判断这个星球的连通状况。 欸,这样好像简单了许多 代码: 1 #inc 阅读全文
posted @ 2019-07-24 10:44 Simex 阅读(156) 评论(0) 推荐(0)
摘要:这道题就是图论最短路,但是我们要改一下一些细节 比如说,因为这是算汇率,我们的初始化就要是0 我们还要改一改松弛操作 还有,题目上给的是汇率(而且是整形) 所以说我们要改成小数 以及,汇率是我们在操作中的“损失” 那么,我们留下的部分就是1-汇率(易得) DOUBLE警告 以上就是特别注意 其实还有 阅读全文
posted @ 2019-06-28 21:29 Simex 阅读(598) 评论(2) 推荐(1)
摘要:我跟你们说,这就是道假的黄题,普及难度还差不多,太水了 提议没啥好说的,搜索就是了 题目链接:Miku 1 /* 2 这是道假的黄题 3 4 */ 5 6 7 8 9 #include<iostream> 10 #include<algorithm> 11 #include<cstring> 12 阅读全文
posted @ 2019-06-14 19:18 Simex 阅读(237) 评论(0) 推荐(0)
摘要:这道题就是我们的sb比赛第四题 这道题吧,还是很有意思的,需要用到二分,不过用bfs也行(暴力出奇迹) 并且深刻让我感受到了做题时,重构代码的恶心 有时候就是写错了一个字母,但是怎么找还找不出来 题目链接:Miku 这道题就是BFS+可能是记忆化?+图论 中心就是记录当前点,用的边数,和最小值,而答 阅读全文
posted @ 2019-06-02 09:23 Simex 阅读(199) 评论(0) 推荐(0)
摘要:农夫约翰再显神威,双向热浪,双倍数组 (双倍大小,否则RE) 题目链接:MIKU 怎么说呢,裸的最短路,但是好像floyd不优化不行 SPFA好写是好写,但是容易被卡 有空还是学Dijkstra比较好 SPFA我觉得就是贪心,从初始点开始一圈一圈的往外扩,然后找的(或者被卡),竞赛最好不要用 (听说 阅读全文
posted @ 2019-05-26 20:24 Simex 阅读(217) 评论(2) 推荐(0)
摘要:题目链接:Miku 这道题还是很简单的,暴力DFS,当然,只要你会基础图论(存图) 连边界都不用考虑,就是搜搜搜,记记记,溯溯溯 /* 真的,暴力DFS */ #include<iostream> #include<cstring> using namespace std; int tu[60][6 阅读全文
posted @ 2019-05-17 21:38 Simex 阅读(305) 评论(1) 推荐(0)
摘要:GOOD NIGHT 诸位,这是最小生成树的模板(掌声) 最小生成树 以下是题目链接:FOR——MIKU 代码如下 阅读全文
posted @ 2019-04-26 20:34 Simex 阅读(333) 评论(0) 推荐(0)
摘要:我什么都说不出来了 GOOD LUCKY 阅读全文
posted @ 2019-03-17 16:07 Simex 阅读(281) 评论(0) 推荐(0)