当前位置: 首页 > news >正文

【数据结构】点分治 点分树

求树上长度小于等于k的路径

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 10010, M = N * 2;int n, m;
int h[N], e[M], w[M], ne[M], idx; //邻接表
bool st[N]; //记录每个点是否被删掉
int p[N]; //存储当前重心的所有子树中所有节点之间的所有距离
int q[N]; //存储当前子树中所有节点之间的所有距离void add(int a, int b, int c) //添加边
{e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}int get_size(int u, int fa) //求以 u 为根的子树大小
{if(st[u]) return 0; //被删掉的节点不考虑int res = 1; //记录节点数for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(j == fa) continue;res += get_size(j, u);}return res;
}//tot 表示当前整棵树的大小
//求重心 wc(并不一定是重心,只要保证删掉 wc 每个子树的大小 <= tot / 2 即可),并返回当前子树大小
int get_wc(int u, int fa, int tot, int &wc)
{if(st[u]) return 0; //如果当前点已经被删除,直接返回int sum = 1, ms = 0; //sum 表示当前子树的节点数,ms 表示去掉当前点剩余子树的节点最大值for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(j == fa) continue;int t = get_wc(j, u, tot, wc);ms = max(ms, t);sum += t;}ms = max(ms, tot - sum);if(ms <= tot / 2) wc = u; //如果子树的节点最大值 <= tot / 2,说明找到一个 “重心”return sum;
}//求一下 u 所在子树中每个点里到重心的距离,u 到重心的距离为 dist
void get_dist(int u, int fa, int dist, int &qt)
{if(st[u]) return;q[qt++] = dist;for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(j == fa) continue;get_dist(j, u, dist + w[i], qt);}
}int get(int a[], int k) //求长度为 k 的数组 a 中相加和 <= m 的数对个数
{sort(a, a + k); //先将 a 数组从小到大排序int res = 0; //记录总方案数for(int i = k - 1, j = -1; i >= 0; i--){while(j + 1 < i && a[j + 1] + a[i] <= m) j++;j = min(j, i - 1); //j 最多只能到 i - 1res += j + 1; //累加方案数}return res;
}int calc(int u) //点分治
{if(st[u]) return 0; //如果当前点已经被删除,直接返回int res = 0; //记录答案get_wc(u, -1, get_size(u, -1), u); //找重心st[u] = true; //删除重心//归并处理所有子树int pt = 0; //记录 p 数组的大小for(int i = h[u]; i != -1; i = ne[i]){int j = e[i], qt = 0; //qt 表示 q 数组的大小get_dist(j, -1, w[i], qt); //求一下 j 所在子树中每个点里到重心的距离,并存到 q 数组中res -= get(q, qt); //减去当前子树中不符合条件的路径条数for(int k = 0; k < qt; k++){if(q[k] <= m) res++; //加上所有到重心的距离 <= m 的路径p[pt++] = q[k]; //将当前子树中的路径全部加入 p 数组}}res += get(p, pt); //加上所有端点在不同子树的合法路径条数for(int i = h[u]; i != -1; i = ne[i]) res += calc(e[i]); //递归处理每棵子树内部的路径return res;
}int main()
{while(scanf("%d%d", &n, &m), n || m){memset(h, -1, sizeof h); //初始化邻接表memset(st, 0, sizeof st); //清空标记数组for(int i = 0; i < n - 1; i++){int a, b, c;scanf("%d%d%d", &a, &b, &c);add(a, b, c), add(b, a, c); //无向边}printf("%d\n", calc(0)); //点分治}return 0;
}

264. 权值

给定一棵 NN 个节点的树,每条边带有一个权值。

求一条简单路径,路径上各条边的权值和等于 KK,且路径包含的边的数量最少。

输入格式

第一行两个整数 N,KN,K。

第 2∼N2∼N 行每行三个整数 x,y,zx,y,z,表示一条无向边的两个端点 x,yx,y 和权值 zz,点的编号从 00 开始。

输出格式

输出一个整数,表示最少边数量。

如果不存在满足要求的路径,输出 −1−1。

数据范围

1≤N≤2×1051≤N≤2×105,
1≤K≤1061≤K≤106,
0≤z≤1060≤z≤106

输入样例:

Copy

4 3
0 1 1
1 2 2
1 3 4

输出样例:

Copy

2
#include <iostream>
#include <cstring>using namespace std;typedef pair<int, int> PII;const int N = 200010, M = N * 2, S = 1000010, INF = 0x3f3f3f3f;int n, m;
int h[N], e[M], w[M], ne[M], idx;
bool st[N];
//p[i] 存储所有子树中的每个点到重心的距离和边数
//q[i] 存储当前子树中的每个点到重心的距离和边数
PII p[N], q[N];
int f[S]; //f[i] 表示前面所有子树中到重心距离为 i 的路径的边数最小值
int res = INF; //记录答案void add(int a, int b, int c) //添加边
{e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}int get_size(int u, int fa) //求 u 所在子树的大小
{if(st[u]) return 0;int res = 1;for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(j == fa) continue;res += get_size(j, u);}return res;
}int get_wc(int u, int fa, int tot, int &wc) //求重心,并返回子树大小
{if(st[u]) return 0;int sum = 1, ms = 0;for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(j == fa) continue;int t = get_wc(j, u, tot, wc);ms = max(ms, t);sum += t;}ms = max(ms, tot - sum);if(ms <= tot / 2) wc = u;return sum;
}//求一下当前子树中的所有点到重心的距离和边数
//dist 表示 u 到重心的距离
//cnt 表示 u 到重心的边数
void get_dist(int u, int fa, int dist, int cnt, int &qt)
{if(st[u] || dist > m) return; //被删的点、到重心的距离 > m 的点不需要考虑q[qt++] = {dist, cnt};for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(j == fa) continue;get_dist(j, u, dist + w[i], cnt + 1, qt);}
}void calc(int u) //点分治
{if(st[u]) return;get_wc(u, -1, get_size(u, -1), u); //求重心st[u] = true; //将重心删去//归并子树之间的信息int pt = 0;for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];int qt = 0;get_dist(j, -1, w[i], 1, qt); //求一下当前子树中的所有点到重心的距离和边数for(int k = 0; k < qt; k++){auto &t = q[k];if(t.first == m) res = min(res, t.second); //更新第三类路径res = min(res, f[m - t.first] + t.second); //更新第二类路径p[pt++] = t; //将当前节点存入整棵子树的数组中}for(int k = 0; k < qt; k++) //用当前子树的信息更新 f{auto &t = q[k];f[t.first] = min(f[t.first], t.second);}}for(int i = 0; i < pt; i++)  f[p[i].first] = INF; //重置 ffor(int i = h[u]; i != -1; i = ne[i]) calc(e[i]); //递归处理每棵子树
}int main()
{scanf("%d%d", &n, &m);memset(h, -1, sizeof h); //初始化邻接表for(int i = 0; i < n - 1; i++){int a, b, c;scanf("%d%d%d", &a, &b, &c);add(a, b, c), add(b, a, c); //无向边}memset(f, 0x3f, sizeof f); //初始化 fcalc(0); //点分治if(res == INF) res = -1; //如果 res = INF,说明无解printf("%d\n", res);return 0;
}

 

2226. 开店

  •    题目
  •    提交记录
  •    讨论
  •    题解
  •    视频讲解

MarkDown视图Copy

风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学。

最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱。

这样的想法当然非常好啦,但是她们也发现她们面临着一个问题,那就是店开在哪里,面向什么样的人群。

很神奇的是,幻想乡的地图是一个树形结构,幻想乡一共有 nn 个地方,编号为 11 到 nn,被 n−1n−1 条带权的边连接起来。

每个地方都住着一个妖怪,其中第 ii 个地方的妖怪年龄是 xixi。

妖怪都是些比较喜欢安静的家伙,所以它们并不希望和很多妖怪相邻。

所以这个树所有顶点的度数都小于或等于 33。

妖怪和人一样,兴趣点随着年龄的变化自然就会变化,比如我们的 1818 岁少女幽香和八云紫就比较喜欢可爱的东西。

幽香通过研究发现,基本上妖怪的兴趣只跟年龄有关,所以幽香打算选择一个地方 uu(uu为编号),然后在 uu 开一家面向年龄在 LL 到 RR 之间(即年龄大于等于 LL、小于等于 RR)的妖怪的店。

也有可能 uu 这个地方离这些妖怪比较远,于是幽香就想要知道所有年龄在 LL 到 RR 之间的妖怪,到点 uu 的距离的和是多少(妖怪到 uu 的距离是该妖怪所在地方到 uu 的路径上的边的权之和),幽香把这个称为这个开店方案的方便值。

幽香她们还没有决定要把店开在哪里,八云紫倒是准备了很多方案,于是幽香想要知道,对于每个方案,方便值是多少呢。

输入格式

第一行三个用空格分开的数 n、Qn、Q 和 AA,表示树的大小、开店的方案个数和妖怪的年龄上限。

第二行 nn 个用空格分开的数 x1、x2、…、xnx1、x2、…、xn,xixi 表示第 ii 个地点妖怪的年龄,满足 0<=xi<A0<=xi<A。(年龄是可以为 00 的,例如刚出生的妖怪的年龄为 00。)

接下来 n−1n−1 行,每行三个用空格分开的数 a、b、ca、b、c,表示树上的顶点 aa 和 bb 之间有一条权为 cc 的边,aa 和 bb 是顶点编号。

接下来 QQ 行,每行三个用空格分开的数 u、a、bu、a、b。对于这 QQ 行的每一行,用 a、b、Aa、b、A 计算出 LL 和 RR,表示询问“在地方 uu 开店,面向妖怪的年龄区间为 [L,R][L,R] 的方案的方便值是多少”。

对于其中第 11 行,LL 和 RR 的计算方法为:L=min(a%A,b%A)L=min(a%A,b%A), R=max(a%A,b%A)R=max(a%A,b%A)。

对于第 22 到第 QQ 行,假设前一行得到的方便值为 ansans,那么当前行的 LL 和 RR 计算方法为: L=min((a+ans)%A,(b+ans)%A)L=min((a+ans)%A,(b+ans)%A), R=max((a+ans)%A,(b+ans)%A)R=max((a+ans)%A,(b+ans)%A)。

输出格式

对于每个方案,输出一行表示方便值。

数据范围

1≤n≤1500001≤n≤150000,
1≤Q≤2000001≤Q≤200000,
1≤A≤1091≤A≤109,
1≤c≤10001≤c≤1000

输入样例:

Copy

10 10 10
0 0 7 2 1 4 7 7 7 9
1 2 270
2 3 217
1 4 326
2 5 361
4 6 116
3 7 38
1 8 800
6 9 210
7 10 278
8 9 8
2 8 0
9 3 1
8 0 8
4 2 7
9 7 3
4 7 0
2 2 7
3 2 1
2 3 4
输出样例:

Copy

1603
957
7161
9466
3232
5223
1879
1669
1282
0

 

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;typedef long long LL;const int N = 150010, M = N * 2;int n, m, A;
int h[N], e[M], w[M], ne[M], idx; //邻接表
int age[N]; //存储每个节点的年龄
bool st[N]; //记录每个节点是否被删掉
struct Father
{int u, num; //记录每个节点在它所在的子树的重心 u 的第 num 个儿子中LL dist; //记录每个节点到重心 u 的距离
}; //存储每个节点关于父节点的信息
vector<Father> f[N]; //对于每个节点都要存储若干个父节点的信息
struct Son
{int age; //记录当前节点的年龄LL dist; //记录当前节点到重心的距离bool operator< (const Son &t) const{return age < t.age;}
};
vector<Son> son[N][3]; //对于每个节点最多有 3 棵子树,需要存储每棵子树中所有节点的信息void add(int a, int b, int c) //添加边
{e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}int get_size(int u, int fa) //求 u 所在子树的大小
{if(st[u]) return 0; //如果 u 已经被删掉,直接返回int res = 1;for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(j == fa) continue;res += get_size(j, u);}return res;
}int get_wc(int u, int fa, int tot, int &wc) //求重心
{if(st[u]) return 0; //如果 u 已经被删掉,直接返回int sum = 1, ms = 0; //记录 u 所在子树大小,ms 表示所有子树的最大节点数for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(j == fa) continue;int t = get_wc(j, u, tot, wc);ms = max(ms, t);sum += t;}ms = max(ms, tot - sum);if(ms <= tot / 2) wc = u;return sum;
}//dist 表示 u 到重心的距离
//wc 表示重心
//k 表示 u 是 wc 的第几棵子树
void get_dist(int u, int fa, LL dist, int wc, int k, vector<Son> &p) //将 u 的第 k 个子树中所有节点存储 p
{if(st[u]) return; //如果 u 已经被删掉,直接返回f[u].push_back({wc, k, dist}); //存储重心信息p.push_back({age[u], dist}); //存储子节点信息for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(j == fa) continue;get_dist(j, u, dist + w[i], wc, k, p);}
}void calc(int u) //构建点分树
{if(st[u]) return; //如果 u 已经被删掉,直接返回get_wc(u, -1, get_size(u, -1), u); //求重心st[u] = true; //将重心删掉for(int i = h[u], k = 0; i != -1; i = ne[i]) //k 表示当前子树的编号{int j = e[i];if(st[j]) continue; //如果 j 已经被删掉,说明它已经作为重心出现在前面,不再考虑auto &p = son[u][k]; //当前子树对应的容器p.push_back({-1, 0}), p.push_back({A + 1, 0}); //加入两个哨兵,防止边界情况get_dist(j, -1, w[i], u, k, p); //将子树中所有点存储对应的容器中k++;sort(p.begin(), p.end()); //将子树中所有节点按照年龄排序for(int i = 1; i < p.size(); i++) p[i].dist += p[i - 1].dist; //预处理距离的前缀和}for(int i = h[u]; i != -1; i = ne[i]) calc(e[i]); //递归构建每棵子树
}LL query(int u, int l, int r) //计算所有年龄在 [l, r] 之间的点到 u 的距离之和
{LL res = 0; //记录答案for(int i = 0; i < f[u].size(); i++) //枚举 u 所在的每一层{auto &t = f[u][i]; //记录当前层的重心int g = age[t.u];if(g >= l && g <= r) res += t.dist; //如果重心也在年龄范围内,单独考虑for(int j = 0; j < 3; j++) //枚举重心的所有子树{if(j == t.num) continue; //和 u 在同一棵子树的节点不用考虑auto &p = son[t.u][j]; //当前子树的所有节点if(p.empty()) continue; //如果当前子树为空,直接跳过int a = lower_bound(p.begin(), p.end(), Son({l, -1})) - p.begin();int b = lower_bound(p.begin(), p.end(), Son({r + 1, -1})) - p.begin() - 1;res += t.dist * (b - a + 1) + p[b].dist - p[a - 1].dist; //计算当前层和 u 不在同一子树的所有路径的距离和}}for(int i = 0; i < 3; i++) //枚举 u 的所有子树{auto &p = son[u][i]; //当前子树的所有节点if(p.empty()) continue; //如果当前子树为空,直接跳过int a = lower_bound(p.begin(), p.end(), Son({l, -1})) - p.begin();int b = lower_bound(p.begin(), p.end(), Son({r + 1, -1})) - p.begin() - 1;res += p[b].dist - p[a - 1].dist; //计算当前子树中所有路径的距离和}return res;
}int main()
{scanf("%d%d%d", &n, &m, &A);for(int i = 1; i <= n; i++) scanf("%d", &age[i]);memset(h, -1, sizeof h); //初始化邻接表for(int i = 0; i < n - 1; i++){int a, b, c;scanf("%d%d%d", &a, &b, &c);add(a, b, c), add(b, a, c); //无向边}calc(1); //构建点分树LL res = 0; //记录当前的答案while(m--){int u, a, b;scanf("%d%d%d", &u, &a, &b);int l = (a + res) % A, r = (b + res) % A;if(l > r) swap(l, r);res = query(u, l, r); //查询当前询问printf("%lld\n", res);}return 0;
}

相关文章:

【数据结构】点分治 点分树

求树上长度小于等于k的路径 #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 10010, M N * 2;int n, m; int h[N], e[M], w[M], ne[M], idx; //邻接表 bool st[N]; //记录每个点是否被删掉 int p[N]; //存储…...

K8s Calico替换为Cilium,以及安装Cilium过程(鲁莽版)

迁移CNI插件的3种办法&#xff1a; 1、创建一个新的集群&#xff0c;通过Gitops的方式迁移负载&#xff0c;然而&#xff0c;这可能涉及大量的准备工作和潜在的中断。 2、另一种方法是重新配置/etc/cni/net.d/指向Cilium。但是&#xff0c;现有的pod仍将由旧的…...

背景图鼠标放上去切换图片过渡效果

文章目录 css鼠标放上去之前效果鼠标放上去时效果 css <li class"message"></li>.message {width: 22px;height: 22px;background-image: url(/assets/message-01.png);background-size: cover;background-position: center;transition: background-ima…...

【Linux】当前进展

驱动层日志添加了下文件目录&#xff0c;函数&#xff0c;代码行的打印&#xff08;这里要小心&#xff0c;驱动目录源代码打印日志里边添进程号可能有问题&#xff0c;因为在驱动初始化的时候&#xff0c;内核还没有创建进程&#xff0c;不过猜测可以先不打印进程相关信息&…...

阿里云云效多个ssh密钥对配置

实现功能 windows本地多个ssh密钥对,分别对应不同的阿里云账号的云效 实现办法 1.生成ssh密钥对 ssh-keygen -t rsa -f C:\xxx\id_rsa_customname(我这里C:\Users\admin\.ssh\id_rsa_customname) 2.配置.ssh目录的config文件 # ruiyi Host customnameHostName codeup.al…...

前后端跨域问题及其在ThinkPHP中的解决方案

在现代Web开发中&#xff0c;前后端分离的架构越来越普遍&#xff0c;但这也带来了跨域问题。跨域指的是在一个域下的网页试图请求另一个域的资源&#xff0c;浏览器出于安全考虑会限制这种行为。本文将探讨如何在ThinkPHP中解决跨域问题。 #### 1. 什么是跨域&#xff1f; 跨…...

基于CentOS7上安装MicroK8s(最小生产的 Kubernetes)

简介 MicroK8s是一个轻量级的Kubernetes发行版,其内存和存储要求远低于全尺寸Kubernetes集群。它可以在几分钟内通过一条命令快速创建功能齐全的Kubernetes集群,极大地简化了部署过程。 兼容性:MicroK8s与Kubernetes全面兼容,确保用户可以无缝迁移和扩展他们的应用程序。 …...

从《GTA5》的反外挂斗争看网络安全的重要性

摘要&#xff1a; 在网络游戏的世界里&#xff0c;外挂&#xff08;作弊软件&#xff09;一直是破坏游戏公平性和玩家体验的一大难题。作为一款深受全球玩家喜爱的游戏&#xff0c;《GTA5》&#xff08;Grand Theft Auto V&#xff09;在线模式也不例外地遭遇了外挂问题。本文将…...

python如何将字符转换为数字

python中的字符数字之间的转换函数 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字…...

TikTok流量不佳:是网络环境选择不当还是其他原因?

TikTok&#xff0c;作为全球短视频社交平台的佼佼者&#xff0c;每天都有海量的内容被上传和分享。然而&#xff0c;很多用户和内容创作者发现&#xff0c;他们的TikTok视频流量并不理想。这引发了一个问题&#xff1a;TikTok流量不佳&#xff0c;是因为网络环境选择不当&#…...

QT菜单栏设计(二级菜单栏)

目的&#xff1a;创建一级菜单栏&#xff0c;添加对应选项&#xff0c;并向一级菜单栏中添加二级菜单栏选项。 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindo…...

网站建设中,常用的后台技术有哪些,他们分别擅长做什么网站平台

PHP、Python、JavaScript、Ruby、Java和.NET各自适用于不同类型的网站平台。以下是对这些编程语言适用场景的具体介绍&#xff1a; PHP Web开发&#xff1a;PHP是一种广泛使用的开源服务器端脚本语言&#xff0c;特别适合Web开发。全球有超过80%的网站使用PHP作为服务器端编程语…...

【线程】POSIX信号量---基于环形队列的生产消费者模型

信号量概念 这篇文章是以前写的&#xff0c;里面讲了 System V的信号量的概念&#xff0c;POSIX信号量和SystemV信号量作用相同&#xff0c;都是用于同步操作&#xff0c;达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步。 信号量的概念 POSIX信号量的接口 初始化…...

Excel 设置自动换行

背景 版本&#xff1a;office 专业版 11.0 表格内输入长信息&#xff0c;发现默认状态时未自动换行的&#xff0c;找了很久设置按钮&#xff0c;遂总结成经验帖。 操作 1&#xff09;选中需设置的单元格/区域/行/列。 2&#xff09;点击【开始】下【对齐方式】中的【自动换…...

UNI-SOP使用说明

UNI-SOP提供了两个集成客户端&#xff1a;SpringBoot2.x/JAVA1.8和SpringBoot3.x/JAVA17&#xff0c;满足不同项目的集成需求。 平台接入 使用UNI-SOP之前&#xff0c;业务平台需要进行接入&#xff0c;完成校验后才能正常使用&#xff0c;先引入客户端开发SKD包。 <depen…...

记录-java web 生成并下载zip文件

java生成zip文件&#xff0c;zip文件分两种&#xff1a;一种是包含文件夹、一种是不包含文件夹 生成zip文件的方式 ZipOutputStream zipOutputStream new ZipOutputStream(response.getOutputStream());// 文件夹名称String folder "download/";ZipEntry ze new Z…...

大数据集群部署文档

大数据集群部署文档 注意&#xff1a;需配合大数据集群启动&检查文档进行部署&#xff0c;以便可以检验每一个组件是否部署成功。 文章目录 大数据集群部署文档一、部署前准备1. 确保所有机器可以访问外网2. 配置root用户ssh连接3. 解决Vmware ESXi 6.5 Ubuntu虚拟机ssh连…...

HTML中的表单(超详细)

一、表单 1.语法 <!-- action&#xff1a;提交的地方 method&#xff1a;提交的方式&#xff08;get会显示&#xff0c;post不会&#xff09; --> <form action"#" method"get"><p>名字&#xff1a;<input name"name" ty…...

初识 C 语言(一)

目录 一、 第一个 C 程序1. printf() 函数和 stdio.h 头文件2. main() 函数和 return 语句 二、类型和变量1. C 语言中的基本类型2. 变量的创建和命名规则3. 类型和变量的大小 三、printf() 函数和 scanf() 函数1. printf() 函数的使用2. 各种类型的输出格式3. scanf() 函数的使…...

LiveNVR监控流媒体Onvif/RTSP功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveNVR监控流媒体Onvif/RTSP功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、视频广场2、录像回看3、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、视频广场 视频广场 -》播放 &#xff0c;左键单击可以拉取矩形框&#xff0c;放大选中的范围&#xff…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...