![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 70
逍遥Fau
为伊蕾娜献上心脏!
展开
-
AcWing4202 穿过圆 (树上最短路 / bitset优化暴力)
题目链接: 穿过圆大致题意给定nnn个点, mmm个圆. 保证每个点不会在圆边上, 且圆和圆之间不相交.有kkk次询问, 每次询问连线两个点a,ba, ba,b, 至少需要穿过多少个圆.解题思路思路一: 转化为树上最短路问题我们考虑到由于题目保证圆与圆不相交, 且点不在圆上. 那么如果我设全集为第m+1m+1m+1个圆, 则nnn个点必然都包含在m+1m+1m+1个圆之中.如果我们认为某个点ppp所属圆是: 包含点ppp, 且半径最小的. 则每个点也必然有一个所属圆.我们考虑每次询问两点a原创 2021-12-31 11:07:21 · 159 阅读 · 0 评论 -
AcWing4084 号码牌 (并查集 / bitset优化Floyd)
题目链接: 号码牌大致题意给定一个长度为nnn的序列, 第iii个位置的值为aia_iai. (保证aaa是111~nnn的一个排列)每个位置还有一个值did_idi, 若满足∣i−j=di∣|i-j=d_i|∣i−j=di∣, 表示位置iii和位置jjj可以进行任意次交换.问: 能否使得最终的序列满足ai=ia_i = iai=i.解题思路并查集 (数据太小了, 比赛时写了个Floyd)由于两个位置的交换次数是任意次. 因此, 如果xxx和yyy可以交换, 且yyy和zzz可以交换原创 2021-12-05 10:13:55 · 481 阅读 · 0 评论 -
Codeforces1592D Hemose in ICPC ? (欧拉序)
题目链接: Hemose in ICPC ?大致题意给定一棵有nnn个顶点, n−1n - 1n−1条边的树.定义: Dist(a,b)=a,b两点间路径的gcd的最大值.Dist(a, b) = a, b两点间路径的gcd的最大值.Dist(a,b)=a,b两点间路径的gcd的最大值.我们可以进行最多121212次询问, 每次询问给出一个点集, 系统会返回当前点集的所有点对中的最大DistDistDist.最终需要输出两个点a,ba, ba,b, 要求最大化Dist(a,b)Dist(a, b)原创 2021-10-06 16:39:01 · 204 阅读 · 2 评论 -
牛客练习赛11 假的字符串 (单词Trie + 拓扑排序)
题目链接: 假的字符串大致题意给定nnn个字符串, 互不相等, 你可以任意指定字符之间的大小关系(即重定义字典序).求有多少个串可能成为字典序最小的串, 并输出它们.解题思路单词Trie + 拓扑排序 (记录给学弟出题, 然后自己被坑到的一次QAQ)比较容易想到的一点就是, 如果某个字符串的前缀字符串出现过, 则该字符串一定不合法.我们很容易想到用Trie来判断.但有一点应当注意, 当我们假设当前字符串字典序最小时, 我们要注意是否字母大小关系有出现环的情况.例如:3aa abb原创 2021-09-30 15:01:46 · 258 阅读 · 0 评论 -
牛客挑战赛47 C - 条件 (bitset优化Floyd)
题目链接: 条件大致题意QAQ解题思路Floyd读完题目, 很明显是多源最短路的考察. 而本题的数据范围为1E3, 我们是跑不下O(n3)的Floyd算法的.考虑到优化: 用bitset优化, 复杂度为O(n3 / 32).我们用g[N][N]数组表示两点是否可达.用k, i, j表示Floyd的三个循环变量, 通常的传递过程为g[i][j] |= g[i][k] and g[k][j].而对于bitset优化的floyd, 我们取消掉第三层j循环, 如果g[i][k], 则g[i] |=原创 2021-06-16 16:51:06 · 384 阅读 · 0 评论 -
Blood Cousins (dsu on tree + 求第k级祖先)
题目链接: Blood Cousins大致题意给出一片森林, 询问对于给定的点而言, 其k级祖先中有多少个点的深度和当前节点相同.解题思路dsu on tree对于每个询问x, k而言, 我们假设x的k级祖先为p, 则对于每一个p, 我们求出其子树中不同深度的节点数量即可. 我们可以通过dsu on tree做法求出.关于节点的k级祖先求法, 大家可以看这篇博客 ➡️ 博客链接AC代码#include <bits/stdc++.h>#define rep(i, n) for (原创 2021-05-26 15:36:27 · 157 阅读 · 0 评论 -
P5903 树上 k 级祖先 (树上倍增)
题目链接: P5903 树上 k 级祖先大致题意不 要 问 我 题 目 为 什 么 带 空 格.解题思路树上倍增 不会吧, 不会吧, 你还没学LCA吗? (如果你学过了LCA, 那就比较好理解这个题.)首先对于一个节点, 如果我们想求他的第k级祖先, 我们不妨把k看成二进制的形式.假设 k = 37 = (100101)2, 那么对于节点x, 其37级祖先我们可以这样去求:x -> x的第32级祖先(称为: x32) -> x32的第4级祖先(称为: x32,4) -> x原创 2021-05-26 13:43:36 · 504 阅读 · 0 评论 -
Til the Cows Come Home(dijkstra)
公交站1是dxt的位置,公司所在的位置是N。所有公交站中共有T (1 <= T <= 2000)条双向路径。dxt为了锻炼未来的ACMer,决定让你帮他计算他到公司的最短距离。可以保证这样的路存在。Given the trails between the landmarks, determine the minimum distance Bessie must walk to get back to the barn. It is guaranteed that some such route exis原创 2020-02-13 18:29:08 · 447 阅读 · 0 评论 -
Swapping Places(拓扑排序) 详解
题目连接: Swapping Places大致题意:给定S种动物, L对朋友关系, N个动物, 如果两个相邻的动物是朋友关系, 则可以换序. 让你给n个动物排序, 希望尽可能按照字典序输出所有动物解题思路:拓扑排序, 由于两个不是朋友关系(或者为同种动物)的两个动物的前后相对位置是不会改变的(即 后面的动物不会排序到前面这个动物的前面). 所以我们可以以此约束建立拓扑图. 遍历每一个位置, 观察前面出现的动物有没有对当前动物产生约束的. 但这样的复杂度为O(n2).优化: 其实我们每次只需要在当前原创 2020-07-15 23:31:30 · 435 阅读 · 0 评论 -
Directing Edges(拓扑排序)
题目链接: Directing Edges大致题意:给定n个顶点, m条有向边的图(不一定连通), 这m条边有些边是已经确定好方向的, 有一些是还没有确定的, 你需要确定所有未确定方向的边(让他们从a->b or b->a), 使得图中不出现环.若可以实现, 输出YES和一种可行解, 否则输出NO解题思路:拓扑排序的应用, 先不管所有未确定方向的边, 只计算所有确定方向的边, 若此时图中无环, 则我们一定也可以存在某种方式使得最终的图中也无环.分析: 如果原先图中无环, 则一定存在一原创 2020-10-11 21:30:59 · 321 阅读 · 1 评论 -
Uncle Bogdan and Country Happiness
题目链接: Uncle Bogdan and Country Happiness大致题意:给定n个城市, m个人, n-1条边, 第i个城市居住的人数, 第i个城市的幸福指数. 1号城市为首都, 起初m个人都在首都. 所有人都会从首都出发, 以最短路回到他应该所在的城市, 每途径一个城市, 该城市就会将这个人是否幸福进行统计, 最终以(幸福人数-不幸福人数)作为幸福指数. 对于每个人而言, 有的人起初是快乐的, 有的人起初是不快乐的, 而快乐的人可能到达某个城市后会突然变得不快乐, 而不快乐的人是无法变原创 2020-08-29 20:18:14 · 117 阅读 · 0 评论 -
Weights Division (easy version)
题目链接: Weights Division (easy version)大致题意:给你一个由n个点构成的无环连通树, 有n-1条边.给定一个数值m, 要求从根节点(1号点)出发, 到所有叶子结点的路径和小于等于m. 你可以进行以下操作, 选择一条边, 把这条边的权值/2向下取整. 问最少要进行多少次这样的操作.解题思路:由于只有n-1条边(==>拥有唯一路径), 所以我们可以dfs遍历树统计所有从1号点到叶子结点的路径和, 并记录出每条边连通多少个叶子结点. 当我们优化掉w/2时, 实际结果原创 2020-08-25 14:08:13 · 206 阅读 · 0 评论 -
Just the Last Digit
题目连接: Just the Last Digit题目: 略大致题意:有一张有向图, 只能从小的点跑向大的点, 告诉你从某点a跑到某点b的可行方案数的个位数(a<b), 让你确定任意两点间是否能直达.解题思路:由于只给了个位数, 其实相当于将总的方案数%10给出.某点a到某点b的方法无非是, 间接通过c点(a < c < b), 或者直接到达, 如果我们将所有间接可达的方案总数求出, %10后如果与给出的个位数相同, 则无法直达, 反之可以直达.因此我们只需要枚举a, b,原创 2020-06-15 23:53:42 · 278 阅读 · 0 评论 -
还是畅通工程(prim+kruskal最小生成树)
题目连接: 还是畅通工程题目:某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对...原创 2020-05-04 02:47:10 · 787 阅读 · 0 评论