![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
xbb052
c++大学生
展开
-
二叉树(图论)
画个树模拟一下样例,假设询问点为a,b。距离则为dist[a] + dist[b] 减去这俩点第一个公共父节点到一号点的距离的两倍就可以得出答案。接下来 n 行,每行包含两个整数,其中第 i 行的整数表示结点 i 的子结点编号。如果没有子结点则输出 −1。给定一个 n 个结点(编号 1∼n)构成的二叉树,其根结点为 1 号点。每组测试数据输出 m 行,代表查询的两个结点之间的最短路径长度。接下来 m行,每行包含两个整数,表示要询问的两个结点的编号。进行 m 次询问,每次询问两个结点之间的最短路径长度。原创 2023-03-13 23:43:41 · 196 阅读 · 0 评论 -
作物杂交(spfa()算法)
输入的第 1 行包含 4 个整数 N,M,K,T,N 表示作物种类总数 (编号 1 至 N),M 表示初始拥有的作物种子类型数量,K 表示可以杂交的方案数,T 表示目标种子的编号。第 4 至 K+3 行,每行包含 3 个整数 A,B,C,表示第 A类作物和第 B 类作物杂交可以获得第 C� 类作物的种子。第 6 天至第 10 天,将编号 1 与编号 3 的作物杂交,得到编号 4 的作物种子。第 1 天至第 5 天,将编号 1 与编号 2 的作物杂交,得到编号 3 的作物种子。原创 2023-03-07 23:35:52 · 385 阅读 · 0 评论 -
acwing1562 微博转发(宽搜)
当用户在微博上发布帖子时,他/她的所有关注者都可以查看并转发他/她的帖子,然后这些人的关注者可以对内容再次转发…最后一行首先包含一个整数 K,表示询问次数,然后包含 K 个用户编号,表示询问这些人的帖子的最大可能转发量。如果 B 是 A 的关注者,C 是 B 的关注者,那么 A 的第一层关注者是 B,第二层关注者是 C。现在给定一个社交网络,假设只考虑 L 层关注者,请你计算某些用户的帖子的最大可能转发量。第一行包含两个整数,N 表示用户数量,L 表示需要考虑的关注者的层数。是第 i 名用户关注的总人数,原创 2023-02-28 19:57:34 · 487 阅读 · 0 评论 -
285.没有上司的舞会(树形dp)
在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。每一个点分为选该点和不选该点,以根节点判断取还是不取,每次更新取得时候得最大值和不取得时候的最大值。接下来 N−1 行,每行输入一对整数 L,K,表示 K 是 L 的直接上司。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数 Hi 给出,其中 1≤i≤N。接下来 N 行,第 i 行表示 i 号职员的快乐指数 Hi。Ural 大学有 N 名职员,编号为 1∼N。原创 2023-02-27 13:41:58 · 69 阅读 · 0 评论 -
树的遍历(宽搜,递归)
官方并未给出各节点权值的取值范围,为方便起见,在本网站范围取为 1∼N。现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。第二行包含 N 个整数,表示二叉树的后序遍历。第三行包含 N 个整数,表示二叉树的中序遍历。输出一行 N 个整数,表示二叉树的层序遍历。一个二叉树,树中每个节点的权值互不相同。第一行包含整数 N,表示二叉树的节点数。首先给了我们中序遍历和后续遍历。原创 2023-02-21 18:00:54 · 68 阅读 · 0 评论 -
二分图的最大匹配(匈牙利算法)
如果该点找到的右半部分的点已经匹配成功,则就看该右半部分的这个点 已经匹配成功的左半部分的 这个点,是否可以为它重新匹配,寻找下家。二分图的匹配:给定一个二分图 G,在 G 的一个子图 M 中,M 的边集 {E} 中的任意两条边都不依附于同一个顶点,则称 M 是一个匹配。接下来 m 行,每行包含两个整数 u 和 v,表示左半部点集中的点 u 和右半部点集中的点 v 之间存在一条边。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。请你求出二分图的最大匹配数。原创 2023-02-19 20:55:41 · 140 阅读 · 0 评论 -
染色法判定二分图
接下来 m 行,每行包含两个整数 u 和 v,表示点 u 和点 v 之间存在一条边。用自定义dfs()进行染色,定义一旦返回结果为false证明存在矛盾。给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。第一行包含两个整数 n 和 m。请你判断这个图是否是二分图。如果给定图是二分图,则输出。原创 2023-02-19 19:48:09 · 41 阅读 · 0 评论 -
kruskal算法求最小生成树(并查集)
由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。共一行,若存在最小生成树,则输出一个整数,表示最小生成树的树边权重之和,如果最小生成树不存在则输出。给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出。原创 2023-02-18 15:37:11 · 127 阅读 · 0 评论 -
prim算法求最小生成树 858acwing
由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。接下来 m 行,每行包含三个整数 u,v,w,表示点 u 和点 v 之间存在一条权值为 w 的边。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。共一行,若存在最小生成树,则输出一个整数,表示最小生成树的树边权重之和,如果最小生成树不存在则输出。最近的点,计算到 集合 的最短距离。原创 2023-02-18 00:06:26 · 63 阅读 · 0 评论 -
floyd算法 求最短路acwing854
再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。接下来 k 行,每行包含两个整数 x,y,表示询问点 x 到点 y 的最短距离。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。共 k 行,每行输出一个整数,表示询问的结果,若询问两点间不存在路径,则输出。数据保证图中不存在负权回路。该类算法原理是动态规划。原创 2023-02-17 21:34:33 · 71 阅读 · 0 评论 -
spfa算法 acwing851.spfa求最短路
接下来 m 行每行包含三个整数 x,y,z表示存在一条从点 x 到点 y 的有向边,边长为 z。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,类似于dijkstra()算法,每次更新该点的每一条出边。输出一个整数,表示 11 号点到 n� 号点的最短距离。图中涉及边长绝对值均不超过 10000。第一行包含整数 n 和 m。数据保证不存在负权回路。如果路径不存在,则输出。同样是邻接表的存储方式。原创 2023-02-16 23:41:51 · 82 阅读 · 0 评论 -
dijkstra求最短路(堆优化版本)
用优先队列模拟堆,并且是小根堆,先将已知的一号点和距离放入小根堆,每次取出堆顶,作为起点,寻找该点的出边也就是距离该点最近的点,判断 如果dist【j】>现在的distance+t到该点的边长权值,用取出的堆顶元素更新距离。堆优化版其实就是存储结构不同,这里因为是稀疏图,用邻接表的方式存储,相对于普通的邻接表母版,存储时多一个边长的权值就可以。请你求出 1号点到 n 号点的最短距离,如果无法从 1 号点走到 n号点,则输出 −1。输出一个整数,表示 1 号点到 n 号点的最短距离。看看代码,有注释详解。原创 2023-02-16 19:15:08 · 121 阅读 · 0 评论 -
acwing848 有向图的拓扑排序(图论)
若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。首先思考,如果无环图即满足拓扑排序,是否可以将该节点的所有 出边 删去,结果使得每个节点的入度是0,满足入度是0,则将其存储起来。接下来 m 行,每行包含两个整数 x 和 y,表示存在一条从点 x 到点 y的有向边 (x,y)。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1。共一行,如果存在拓扑序列,则输出任意一个合法的拓扑序列即可。原创 2023-02-15 22:01:06 · 57 阅读 · 0 评论