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

浙公网安备 33010602011771号