class061 最小生成树【算法】

class061 最小生成树【算法】

2023-12-8 11:48:12

算法讲解061【必备】最小生成树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

code1 P3366 【模板】最小生成树

// Kruskal算法模版(洛谷)
// 静态空间实现
// 测试链接 : https://www.luogu.com.cn/problem/P3366
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过

package class061;// Kruskal算法模版(洛谷)
// 静态空间实现
// 测试链接 : https://www.luogu.com.cn/problem/P3366
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;// 时间复杂度O(m * log m) + O(n + m)
public class Code01_Kruskal {public static int MAXN = 5001;public static int MAXM = 200001;public static int[] father = new int[MAXN];// u, v, wpublic static int[][] edges = new int[MAXM][3];public static int n, m;public static void build() {for (int i = 1; i <= n; i++) {father[i] = i;}}public static int find(int i) {if (i != father[i]) {father[i] = find(father[i]);}return father[i];}// 如果x和y本来就是一个集合,返回false// 如果x和y不是一个集合,合并之后返回truepublic static boolean union(int x, int y) {int fx = find(x);int fy = find(y);if (fx != fy) {father[fx] = fy;return true;} else {return false;}}public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));while (in.nextToken() != StreamTokenizer.TT_EOF) {n = (int) in.nval;in.nextToken();m = (int) in.nval;build();for (int i = 0; i < m; i++) {in.nextToken();edges[i][0] = (int) in.nval;in.nextToken();edges[i][1] = (int) in.nval;in.nextToken();edges[i][2] = (int) in.nval;}Arrays.sort(edges, 0, m, (a, b) -> a[2] - b[2]);int ans = 0;int edgeCnt = 0;for (int[] edge : edges) {if (union(edge[0], edge[1])) {edgeCnt++;ans += edge[2];}}out.println(edgeCnt == n - 1 ? ans : "orz");}out.flush();out.close();br.close();}}

code2 P3366 【模板】最小生成树

// Prim算法模版(洛谷)
// 动态空间实现
// 测试链接 : https://www.luogu.com.cn/problem/P3366
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过

package class061;// Prim算法模版(洛谷)
// 动态空间实现
// 测试链接 : https://www.luogu.com.cn/problem/P3366
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.ArrayList;
import java.util.PriorityQueue;// 时间复杂度O(n + m) + O(m * log m)
public class Code02_PrimDynamic {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));while (in.nextToken() != StreamTokenizer.TT_EOF) {ArrayList<ArrayList<int[]>> graph = new ArrayList<>();int n = (int) in.nval;for (int i = 0; i <= n; i++) {graph.add(new ArrayList<>());}in.nextToken();int m = (int) in.nval;for (int i = 0, u, v, w; i < m; i++) {in.nextToken();u = (int) in.nval;in.nextToken();v = (int) in.nval;in.nextToken();w = (int) in.nval;graph.get(u).add(new int[] { v, w });graph.get(v).add(new int[] { u, w });}// int[] record// record[0] : 到达的节点// record[1] : 到达的花费PriorityQueue<int[]> heap = new PriorityQueue<>((a, b) -> a[1] - b[1]);for (int[] edge : graph.get(1)) {heap.add(edge);}// 哪些节点已经发现过了boolean[] set = new boolean[n + 1];int nodeCnt = 1;set[1] = true;int ans = 0;while (!heap.isEmpty()) {int[] edge = heap.poll();int next = edge[0];int cost = edge[1];if (!set[next]) {nodeCnt++;set[next] = true;ans += cost;for (int[] e : graph.get(next)) {heap.add(e);}}}out.println(nodeCnt == n ? ans : "orz");}out.flush();out.close();br.close();}}

code2 P3366 【模板】最小生成树

// 建图用链式前向星
// 堆也是用数组结构手写的、且只和节点个数有关
// 这个实现留给有需要的同学
// 但是一般情况下并不需要做到这个程度

package class061;// Prim算法优化(洛谷)
// 静态空间实现
// 时间复杂度O(n + m) + O((m+n) * log n)
// 测试链接 : https://www.luogu.com.cn/problem/P3366
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;// 建图用链式前向星
// 堆也是用数组结构手写的、且只和节点个数有关
// 这个实现留给有需要的同学
// 但是一般情况下并不需要做到这个程度public class Code02_PrimStatic {public static int MAXN = 5001;public static int MAXM = 400001;public static int n, m;// 链式前向星建图public static int[] head = new int[MAXN];public static int[] next = new int[MAXM];public static int[] to = new int[MAXM];public static int[] weight = new int[MAXM];public static int cnt;// 改写的堆结构public static int[][] heap = new int[MAXN][2];// where[v] = -1,表示v这个节点,从来没有进入过堆// where[v] = -2,表示v这个节点,已经弹出过了// where[v] = i(>=0),表示v这个节点,在堆上的i位置public static int[] where = new int[MAXN];// 堆的大小public static int heapSize;// 找到的节点个数public static int nodeCnt;public static void build() {cnt = 1;heapSize = 0;nodeCnt = 0;Arrays.fill(head, 1, n + 1, 0);Arrays.fill(where, 1, n + 1, -1);}public static void addEdge(int u, int v, int w) {next[cnt] = head[u];to[cnt] = v;weight[cnt] = w;head[u] = cnt++;}// 当前处理的是编号为ei的边!public static void addOrUpdateOrIgnore(int ei) {int v = to[ei];int w = weight[ei];// 去往v点,权重wif (where[v] == -1) {// v这个点,从来没有进入过堆!heap[heapSize][0] = v;heap[heapSize][1] = w;where[v] = heapSize++;heapInsert(where[v]);} else if (where[v] >= 0) {// v这个点的记录,在堆上的位置是where[v]heap[where[v]][1] = Math.min(heap[where[v]][1], w);heapInsert(where[v]);}}public static void heapInsert(int i) {while (heap[i][1] < heap[(i - 1) / 2][1]) {swap(i, (i - 1) / 2);i = (i - 1) / 2;}}public static int u;public static int w;// 堆顶的记录:节点 -> u、到节点的花费 -> wpublic static void pop() {u = heap[0][0];w = heap[0][1];swap(0, --heapSize);heapify(0);where[u] = -2;nodeCnt++;}public static void heapify(int i) {int l = 1;while (l < heapSize) {int best = l + 1 < heapSize && heap[l + 1][1] < heap[l][1] ? l + 1 : l;best = heap[best][1] < heap[i][1] ? best : i;if (best == i) {break;}swap(best, i);i = best;l = i * 2 + 1;}}public static boolean isEmpty() {return heapSize == 0;}// 堆上,i位置的信息 和 j位置的信息 交换!public static void swap(int i, int j) {int a = heap[i][0];int b = heap[j][0];where[a] = j;where[b] = i;int[] tmp = heap[i];heap[i] = heap[j];heap[j] = tmp;}public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));while (in.nextToken() != StreamTokenizer.TT_EOF) {n = (int) in.nval;in.nextToken();m = (int) in.nval;build();for (int i = 0, u, v, w; i < m; i++) {in.nextToken();u = (int) in.nval;in.nextToken();v = (int) in.nval;in.nextToken();w = (int) in.nval;addEdge(u, v, w);addEdge(v, u, w);}int ans = prim();out.println(nodeCnt == n ? ans : "orz");}out.flush();out.close();br.close();}public static int prim() {// 1节点出发nodeCnt = 1;where[1] = -2;for (int ei = head[1]; ei > 0; ei = next[ei]) {addOrUpdateOrIgnore(ei);}int ans = 0;while (!isEmpty()) {pop();ans += w;for (int ei = head[u]; ei > 0; ei = next[ei]) {addOrUpdateOrIgnore(ei);}}return ans;}}

code3 1168.水资源分配优化

// 水资源分配优化
// 村里面一共有 n 栋房子。我们希望通过建造水井和铺设管道来为所有房子供水。
// 对于每个房子 i,我们有两种可选的供水方案:一种是直接在房子内建造水井
// 成本为 wells[i - 1] (注意 -1 ,因为 索引从0开始 )
// 另一种是从另一口井铺设管道引水,数组 pipes 给出了在房子间铺设管道的成本,
// 其中每个 pipes[j] = [house1j, house2j, costj]
// 代表用管道将 house1j 和 house2j连接在一起的成本。连接是双向的。
// 请返回 为所有房子都供水的最低总成本
// 测试链接 : https://leetcode.cn/problems/optimize-water-distribution-in-a-village/

题目:
1168水资源分配优化Plus
困难

村里面一共有n栋房子。我们希望通过建造水和铺设管道来为所有房子供水。

对于每个房子i,我们有两种可选的供水方案:
一种是直接在房子内建造水井,成本为 wells[i - 1] (注意-1,因为索引从0开始);
另一种是从另一口井铺设管道引水,数组pipes给出了在房子间铺设管道的成本,其中每个 pipes[j] = [house1j,house2j,costj]代表用管道
house1jhouse2j连接在一起的成本。连接是双向的。

请返回为所有房子都供水的最低总成本

假定有一个水源连接着所有房子,对应边的权重就是wells,
在采用最小生成树算法,把连接水源的权值最小求出来。

示例一
输入:n =3,wells = [1,2,2],pipes =[[1,2,1],[2,3,1l]
输出:3
解释:
上图展示了铺设管道连接房屋的成本最好的策略是在第一个房子里建造水井(成本为 1),
然后将其他房子铺设管道连起来(成本为 2),所以总成本为3示例 2:
输入:n = 2,wells = [1,1],pipes =[[1,2,11]
输出:2
解释:我们可以用以下三种方法中的一种来提供低成本的水:
选项1:1号房子里面建一口井,成本为1
在房子2内建造井,成本为1
总成本是2。
选项2:1号房子里面建一口井,成本为1
花费1连接房子2和房子1。
总成本是2。
选项3:
在房子2内建造井,成本为1
花费1连接房子1和房子2
总成本是2。
注意,我们可以用cost 1或cost 2连接房子1和房子2
但我们总是选择最便宜的选项。

提示:

  • 2<=n<= 104
  • wells.length == n
  • 0<= wells[i] <= 105
  • 1<= pipes.length <= 104
  • pipes[j].length == 3
  • 1 <= house1j , house2j <= n
  • 0<= costj <= 105
  • house1j != house2j
package class061;import java.util.Arrays;// 水资源分配优化
// 村里面一共有 n 栋房子。我们希望通过建造水井和铺设管道来为所有房子供水。
// 对于每个房子 i,我们有两种可选的供水方案:一种是直接在房子内建造水井
// 成本为 wells[i - 1] (注意 -1 ,因为 索引从0开始 )
// 另一种是从另一口井铺设管道引水,数组 pipes 给出了在房子间铺设管道的成本,
// 其中每个 pipes[j] = [house1j, house2j, costj] 
// 代表用管道将 house1j 和 house2j连接在一起的成本。连接是双向的。
// 请返回 为所有房子都供水的最低总成本
// 测试链接 : https://leetcode.cn/problems/optimize-water-distribution-in-a-village/
public class Code03_OptimizeWaterDistribution {public static int minCostToSupplyWater(int n, int[] wells, int[][] pipes) {build(n);for (int i = 0; i < n; i++, cnt++) {// wells : 100   30//         0(1)  1(2)edges[cnt][0] = 0;edges[cnt][1] = i + 1;edges[cnt][2] = wells[i];}for (int i = 0; i < pipes.length; i++, cnt++) {edges[cnt][0] = pipes[i][0];edges[cnt][1] = pipes[i][1];edges[cnt][2] = pipes[i][2];}Arrays.sort(edges, 0, cnt, (a, b) -> a[2] - b[2]);int ans = 0;for (int i = 0; i < cnt; i++) {if (union(edges[i][0], edges[i][1])) {ans += edges[i][2];}}return ans;}public static int MAXN = 10010;public static int[][] edges = new int[MAXN << 1][3];public static int cnt;public static int[] father = new int[MAXN];public static void build(int n) {cnt = 0;for (int i = 0; i <= n; i++) {father[i] = i;}}public static int find(int i) {if (i != father[i]) {father[i] = find(father[i]);}return father[i];}// 如果x和y,原本是一个集合,返回false// 如果x和y,不是一个集合,合并之后后返回truepublic static boolean union(int x, int y) {int fx = find(x);int fy = find(y);if (fx != fy) {father[fx] = fy;return true;} else {return false;}}}

code4 1697. 检查边长度限制的路径是否存在

// 检查边长度限制的路径是否存在
// 给你一个 n 个点组成的无向图边集 edgeList
// 其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一条长度为 disi 的边
// 请注意,两个点之间可能有 超过一条边 。
// 给你一个查询数组queries ,其中 queries[j] = [pj, qj, limitj]
// 你的任务是对于每个查询 queries[j] ,判断是否存在从 pj 到 qj 的路径
// 且这条路径上的每一条边都 严格小于 limitj 。
// 请你返回一个 布尔数组 answer ,其中 answer.length == queries.length
// 当 queries[j] 的查询结果为 true 时, answer 第 j 个值为 true ,否则为 false
// 测试链接 : https://leetcode.cn/problems/checking-existence-of-edge-length-limited-paths/

package class061;import java.util.Arrays;// 检查边长度限制的路径是否存在
// 给你一个 n 个点组成的无向图边集 edgeList
// 其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一条长度为 disi 的边
// 请注意,两个点之间可能有 超过一条边 。
// 给你一个查询数组queries ,其中 queries[j] = [pj, qj, limitj]
// 你的任务是对于每个查询 queries[j] ,判断是否存在从 pj 到 qj 的路径
// 且这条路径上的每一条边都 严格小于 limitj 。
// 请你返回一个 布尔数组 answer ,其中 answer.length == queries.length
// 当 queries[j] 的查询结果为 true 时, answer 第 j 个值为 true ,否则为 false
// 测试链接 : https://leetcode.cn/problems/checking-existence-of-edge-length-limited-paths/
public class Code04_CheckingExistenceOfEdgeLengthLimit {public static boolean[] distanceLimitedPathsExist(int n, int[][] edges, int[][] queries) {Arrays.sort(edges, (a, b) -> a[2] - b[2]);int m = edges.length;int k = queries.length;for (int i = 0; i < k; i++) {questions[i][0] = queries[i][0];questions[i][1] = queries[i][1];questions[i][2] = queries[i][2];questions[i][3] = i;}Arrays.sort(questions, 0, k, (a, b) -> a[2] - b[2]);build(n);boolean[] ans = new boolean[k];for (int i = 0, j = 0; i < k; i++) {// i : 问题编号// j : 边的编号for (; j < m && edges[j][2] < questions[i][2]; j++) {union(edges[j][0], edges[j][1]);}ans[questions[i][3]] = isSameSet(questions[i][0], questions[i][1]);}return ans;}public static int MAXN = 100001;public static int[][] questions = new int[MAXN][4];public static int[] father = new int[MAXN];public static void build(int n) {for (int i = 0; i < n; i++) {father[i] = i;}}public static int find(int i) {if (i != father[i]) {father[i] = find(father[i]);}return father[i];}public static boolean isSameSet(int x, int y) {return find(x) == find(y);}public static void union(int x, int y) {father[find(x)] = find(y);}}

code5 P2330 [SCOI2005] 繁忙的都市

// 繁忙的都市
// 一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造
// 城市的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连
// 两个交叉路口之间最多有一条道路相连接,这些道路是双向的
// 且把所有的交叉路口直接或间接的连接起来了
// 每条道路都有一个分值,分值越小表示这个道路越繁忙,越需要进行改造
// 但是市政府的资金有限,市长希望进行改造的道路越少越好,于是他提出下面的要求:
// 1. 改造的那些道路能够把所有的交叉路口直接或间接的连通起来
// 2. 在满足要求1的情况下,改造的道路尽量少
// 3. 在满足要求1、2的情况下,改造的那些道路中分值最大的道路分值尽量小
// 作为市规划局的你,应当作出最佳的决策,选择哪些道路应当被修建
// 返回选出了几条道路 以及 分值最大的那条道路的分值是多少
// 测试链接 : https://www.luogu.com.cn/problem/P2330
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过

package class061;// 繁忙的都市
// 一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造
// 城市的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连
// 两个交叉路口之间最多有一条道路相连接,这些道路是双向的
// 且把所有的交叉路口直接或间接的连接起来了
// 每条道路都有一个分值,分值越小表示这个道路越繁忙,越需要进行改造
// 但是市政府的资金有限,市长希望进行改造的道路越少越好,于是他提出下面的要求:
// 1. 改造的那些道路能够把所有的交叉路口直接或间接的连通起来
// 2. 在满足要求1的情况下,改造的道路尽量少
// 3. 在满足要求1、2的情况下,改造的那些道路中分值最大的道路分值尽量小
// 作为市规划局的你,应当作出最佳的决策,选择哪些道路应当被修建
// 返回选出了几条道路 以及 分值最大的那条道路的分值是多少
// 测试链接 : https://www.luogu.com.cn/problem/P2330
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;public class Code05_BusyCities {public static int MAXN = 301;public static int MAXM = 8001;public static int[] father = new int[MAXN];public static int[][] edges = new int[MAXM][3];public static int n, m;public static void build() {for (int i = 1; i <= n; i++) {father[i] = i;}}public static int find(int i) {if (i != father[i]) {father[i] = find(father[i]);}return father[i];}// 如果x和y本来就是一个集合,返回false// 如果x和y不是一个集合,合并之后返回truepublic static boolean union(int x, int y) {int fx = find(x);int fy = find(y);if (fx != fy) {father[fx] = fy;return true;} else {return false;}}public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));while (in.nextToken() != StreamTokenizer.TT_EOF) {n = (int) in.nval;in.nextToken();m = (int) in.nval;build();for (int i = 0; i < m; i++) {in.nextToken();edges[i][0] = (int) in.nval;in.nextToken();edges[i][1] = (int) in.nval;in.nextToken();edges[i][2] = (int) in.nval;}Arrays.sort(edges, 0, m, (a, b) -> a[2] - b[2]);int ans = 0;int edgeCnt = 0;for (int[] edge : edges) {if (union(edge[0], edge[1])) {edgeCnt++;ans = Math.max(ans, edge[2]);}if (edgeCnt == n - 1) {break;}}out.println((n - 1) + " " + ans);}out.flush();out.close();br.close();}}

2023-12-8 14:22:17

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】:线程(二)互斥

互斥与同步 一.线程的局部存储二.线程的分离三.互斥1.一些概念2.上锁3.锁的原理4.死锁 一.线程的局部存储 例子 可以看到全局变量是所有线程共享的&#xff0c;如果我们想要每个线程都单独访问g_val怎么办呢&#xff1f;其实我们可以在它前面加上__thread修饰。 这就相当于把g…

网络入门---网络编程初步认识和实践(使用udp协议)

目录标题 前言准备工作udpserver.hpp成员变量构造函数初始化函数(socket,bind)start函数(recvfrom) udpServer.ccudpClient.hpp构造函数初始化函数run函数(sendto) udpClient.cc测试 前言 在上一篇文章中我们初步的认识了端口号的作用&#xff0c;ip地址和MAC地址在网络通信时…

Python实现GUI图片浏览程序

Python实现GUI图片浏览程序 下面程序需要pillow库。pillow是 Python 的第三方图像处理库&#xff0c;需要安装才能实用。pillow是PIL&#xff08; Python Imaging Library&#xff09;基础上发展起来的&#xff0c;需要注意的是pillow库安装用pip install pillow&#xff0c;导…

【改进YOLOv8】融合可扩张残差(DWR)注意力模块的小麦病害检测系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a; 随着计算机视觉技术的快速发展&#xff0c;深度学习在图像识别和目标检测领域取得了巨大的突破。其中&#xff0c;YOLO&#xff08;You Only Look O…

TruLens RAG Triad 学习

TruLens RAG Triad 学习 0. 背景1. RAG 三元组2. TruLens 快速入门2-1. 安装依赖2-2. 初始化 OpenAI 认证信息2-3. 获取数据2-4. 创建向量存储2-5. 从头构建自定义 RAG2-6. 设置反馈函数2-7. 构建应用程序2-8. 运行应用程序0. 背景 近年来,RAG 架构已成为为大型语言模型 (LLM…

Nexus搭建npm私库(角色管理、上传脚本)

安装Nexus 官网下载 https://www.sonatype.com/products/sonatype-nexus-oss-download 进入官网下载&#xff0c;最新下载方式需要输入个人信息才能下载了 选择对应的系统进行下载 Windows 推荐也下载 UNIX 版本&#xff08;Windows 版本配置比较难改&#xff09; 如果没有下…

Qt 中的窗口类

目录 QWidget 设置父对象 窗口位置 测试代码 窗口尺寸 窗口标题和图标 信号 槽函数 QDialog 常用API QDialog的子类 QMessageBox QFileDialog QFontDialog QFontDialog类的静态API QColorDialog 颜色类 QColor 静态API函数 测试代码 QInputDialog 静态函数…

GPT4停止订阅付费了怎么办? 怎么升级ChatGPT plus?提供解决方案

11月中旬日OpenAI 暂时关闭所有的升级入口之后&#xff0c;很多小伙伴就真的在排队等待哦。其实有方法可以绕开排队&#xff0c;直接付费订阅升级GPT的。赶紧用起来立马“插队”成功&#xff01;亲测~~~ 一、登录ChatGPT账号 1、没有账号可以直接注册一个&#xff0c;流程超级…

前端使用视频作为背景图的方法

实现思路 通过 video source 引入视频&#xff0c;并对视频播放属性进行设置&#xff0c;再通过 css 使视频覆盖背景即可。 代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>有开发问题可联系作者</title>…

学习git后,真正在项目中如何使用?

文章目录 前言下载和安装Git克隆远程仓库PyCharm链接本地Git创建分支修改项目工程并提交到本地仓库推送到远程仓库小结 前言 网上学习git的教程&#xff0c;甚至还有很多可视化很好的git教程&#xff0c;入门git也不是什么难事。但我发现&#xff0c;当我真的要从网上克隆一个…

SQL事务的开启,提交和回滚

在处理数据库数据的时候会出现一种情况就是我们删除两个关联的表其中一个表的信息&#xff0c;另一个表也需要改动&#xff0c;但是我们SQL语句在同时更改两个表的同时&#xff0c;难免会出现一个表修改成功&#xff0c;另一个出现错误&#xff0c;这时候表与表之间就会出现矛盾…

webrtc网之sip转webrtc

OpenSIP是一个开源的SIP&#xff08;Session Initiation Protocol&#xff09;服务器&#xff0c;它提供了一个可扩展的基础架构&#xff0c;用于建立、终止和管理VoIP&#xff08;Voice over IP&#xff09;通信会话。SIP是一种通信协议&#xff0c;用于建立、修改和终止多媒体…

geolife 笔记:将所有轨迹放入一个DataFrame

单条轨迹的处理&#xff1a;geolife笔记&#xff1a;整理处理单条轨迹-CSDN博客 1 加载数据 import pandas as pd import numpy as np import datetime as dt import osdata_dir Geolife Trajectories 1.3/Data/ 1.1 列出所有文件夹 dirlist os.listdir(data_dir) dirlist…

Esxi登录超时:“由于不活动超时,您已被注销“,修改UserVars.HostClientSessionTimeout为0永不超时

Esxi登录超时:“由于不活动超时&#xff0c;您已被注销”,修改UserVars.HostClientSessionTimeout为0永不超时 UserVars.HostClientSessionTimeout0永不超时 Esxi网页登录后,一段时间不操作就会被注销 提示: 由于不活动超时&#xff0c;您已被注销 主机→管理→系统→高级设…

【linux】查看CPU和内存信息

之前咱们一起学习了查看内存的和CPU的命令。 ​mpstat &#xff1a; 【linux】 mpstat 使用 uptime&#xff1a;【Linux】 uptime命令使用 CPU的使用率&#xff1a;【linux】查看CPU的使用率 nmon &#xff1a;【linux】nmon 工具使用 htop &#xff1a;【linux】htop 命令…

文件格式对齐、自定义快捷键、idea

文件格式对齐 Shift Alt F 自动格式化代码的快捷键&#xff08;如何配置自动格式化&#xff09; 日常编码必备idea快捷键 [VS Code] 入门-自定键盘快捷键 文件格式对齐 文件格式对齐通常是通过编辑器或IDE提供的快捷键或命令完成的。以下是一些常见编辑器和IDE中进行文件…

快速认识什么是:Docker

Docker&#xff0c;一种可以将软件打包到容器中并在任何环境中可靠运行的工具。但什么是容器以及为什么需要容器呢&#xff1f;今天就来一起学快速入门一下Docker吧&#xff01;希望本文对您有所帮助。 假设您使用 Cobol 构建了一个在某种奇怪风格的 Linux 上运行的应用程序。您…

InnoDB Architecture MySQL 5.7 vs 8.0

innodb-architecture-5-7 innodb-architecture-8-0 图片均来源于MySQL官网

【Vue】props与$emit的简单理解

Vue组件 组件是Vue中不可或缺的一个功能&#xff0c;它可以将一个页面划分为多个独立的内部组件&#xff0c;方便代码的管理。 定义组件 <body><div id"App"><bcomp></bcomp></div><script>const app Vue.createApp({})cons…

【2023传智杯-新增场次】第六届传智杯程序设计挑战赛AB组-ABC题复盘解题分析详解【JavaPythonC++解题笔记】

本文仅为【2023传智杯-第二场】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言二.赛题题目A题题目-B题题目-C题题目-二.赛题题解A题题解-…