![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
图论
九号新秀
这个作者很懒,什么都没留下…
展开
-
蓝桥杯 算法训练 安慰奶牛 最小生成树
蓝桥杯 算法训练 安慰奶牛题目给出的样例输出应该是178,不是176。题目的意思是从某点出发,遍历所有结点,然后回到起点,花费的最短时间是多少。其中时间花费除了在边上,在结点上也需要花费时间。其中每个边用到两次,经过的每个结点的次数是该结点上有几条边就是几次但是因为边的权值不是唯一的参考依据我们可以 将每条边的权重更新为边本身的两倍再加上连接两条边的结点的值。在最后求出最小生成树的边后还要 加上最小的结点的值。import java.io.*;import java.util.ArrayD原创 2020-10-15 14:14:16 · 103 阅读 · 0 评论 -
单源最短路径 Dijkstra 算法 Java
洛谷 P4779 单源最短路径Dijkstra 算法,解决 有向 非负权图 的单源最短路径算法。import java.io.*;import java.util.ArrayList;import java.util.Arrays;import java.util.PriorityQueue;/** * @author wangshaoyu */public class Main { // 快速输入输出 static PrintWriter pw = new PrintW原创 2020-10-04 16:25:30 · 257 阅读 · 0 评论 -
洛谷 P1991 无线运输网 最小生成树 Java
题意:所有哨所 都要配备无线电收发器,每两个配备了卫星电话的哨所无论距离多远都可以通话。而只通过无线电收发器通话的哨所之间的距离不能超过 D,这是受收发器的功率限制。收发器的功率越高,通话距离 D 会更远,但同时价格也会更贵。收发器需要统一购买和安装,所以全部哨所只能选择安装一种型号的收发器。换句话说,每一对哨所之间的通话距离都是同一个 D。你的任务是 确定收发器必须的最小通话距离 D,使得每一对哨所之间至少有一条通话路径(直接的或者间接的)。用 kruskal 求图的最小生成树,卫星电话的作用就是.原创 2020-10-03 16:16:24 · 94 阅读 · 0 评论 -
poj 3723 Conscription 最小生成树 Java
poj 3723 Conscription买一个人就可以利用一个关系(一条边),一开始买一个人肯定是要10000的,然后再买一个人就可以根据他之前买的那个人的关系进行减价,相当于一共买n个人的话,是利用到n - 1 条边,所以要构建最大生成树。然后每个人都要基本的10000块,所以答案就是每个人10000 然后减去最大生成树里的所有边的权重。package 图论;import java.io.BufferedReader;import java.io.IOException;import java原创 2020-10-01 17:50:21 · 151 阅读 · 0 评论 -
poj 1182 食物链 并查集 Java
poj 1182 食物链这道题其实还不是太明白import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.StreamTokenizer;class UnionFind { int[] parent; int[] size; int count; public UnionFind(int n) {原创 2020-10-01 14:39:54 · 211 阅读 · 0 评论 -
洛谷 P2121 拆地毯 最小生成树 Java
洛谷 P2121 拆地毯这道题其实相当于最小生成树的模板题了,想到用最小生成树做是因为题目中描述:保留的地毯构成的图中,任意可互相到达的两点间只能有一种方式互相到达。其实就是不能有环,因为用一条边连接树中任意两个顶点都会构成一个环,因此就想到了生成树,还有就是题目要求美丽度最大,所以其实是最大生成树。import java.util.*;class Edge implements Comparable<Edge>{ int v; int w; int weight原创 2020-09-30 19:55:45 · 174 阅读 · 0 评论 -
洛谷 p1111 修复公路 并查集 Java
洛谷 p1111 修复公路并查集 + 贪心从小到大选取花费时间,到最后只剩一个连通分量的时候就任意两个村庄都连通了。还有一种方法是用 kruskal 算法,当最小生成树构建完成后,最小生成树里面最大的边的权重就是答案。import java.util.Arrays;import java.util.Comparator;import java.util.Scanner;class UnionFind { int[] parent; int[] size; // 根结点对应的分量的原创 2020-09-30 10:37:30 · 149 阅读 · 0 评论 -
kruskal 算法求最小生成树 Java
洛谷 P3366 【模板】最小生成树import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.StreamTokenizer;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.PriorityQueue;/** * @author wangshao原创 2020-09-30 11:10:49 · 172 阅读 · 0 评论 -
洛谷 P2872 Building Roads S prim算法 java
洛谷 P2872 Building Roads S这道题其实也是最小生成树的模板题,本人是用 prim 算法做的,题目给的是每个点的坐标,所以用两点的距离公式算出每两个点的距离,然后给每两个点都添加上边,因为题目有一些边已经连上了,所以再给图加上这些边(距离为 0),最后直接算最小生成树的边的和(weight 为 0 的边不影响结果)。package 图论;import java.io.BufferedReader;import java.io.IOException;import java.io原创 2020-09-24 19:28:59 · 122 阅读 · 0 评论 -
最小生成树 Prim算法 java
边的实现,同时表示了两个顶点和权重,个人理解 Prim 算法是不断的找最小的横切边,因此边使用这样的表示方便我们获得边的信息/** 边的构建*/class Edge implements Comparable<Edge> { int v; int w; double weight; public Edge(int v, int w, double weight) { this.v = v; this.w = w;原创 2020-09-22 17:35:51 · 304 阅读 · 1 评论