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

【图论】单源最短路

算法提高课笔记。(本篇还未更新完…

目录

  • 单源最短路的建图方式
    • 例题
      • 热浪
        • 题意
        • 思路
        • 代码
      • 信使
        • 题意
        • 思路
        • 代码
      • 香甜的黄油
        • 题意
        • 思路
        • 代码
      • 最小花费
        • 题意
        • 思路
        • 代码
      • 最优乘车
        • 题意
        • 思路
        • 代码
      • 昂贵的聘礼
        • 题意
        • 思路
        • 代码

单源最短路的建图方式

最短路问题可以分为以下两类:

  • 边权非负——朴素Dijkstra、堆优化Dijkstra
  • 有负权边——Bellman-Ford、SPFA

例题

热浪

原题链接

德克萨斯纯朴的民众们这个夏天正在遭受巨大的热浪!!!

他们的德克萨斯长角牛吃起来不错,可是它们并不是很擅长生产富含奶油的乳制品。

农夫John此时身先士卒地承担起向德克萨斯运送大量的营养冰凉的牛奶的重任,以减轻德克萨斯人忍受酷暑的痛苦。

John已经研究过可以把牛奶从威斯康星运送到德克萨斯州的路线。

这些路线包括起始点和终点一共有 T 个城镇,为了方便标号为 1 到 T。

除了起点和终点外的每个城镇都由 双向道路 连向至少两个其它的城镇。

每条道路有一个通过费用(包括油费,过路费等等)。

给定一个地图,包含 C 条直接连接 2 个城镇的道路。

每条道路由道路的起点 Rs,终点 Re 和花费 Ci 组成。

求从起始的城镇 Ts 到终点的城镇 Te 最小的总费用。

输入格式

第一行: 4 个由空格隔开的整数: T,C,Ts,Te;

第 2 到第 C+1 行: 第 i+1 行描述第 i 条道路,包含 3 个由空格隔开的整数: Rs,Re,Ci。

输出格式

一个单独的整数表示从 Ts 到 Te 的最小总费用。

数据保证至少存在一条道路。

数据范围

1 ≤ T ≤ 2500 1≤T≤2500 1T2500,
1 ≤ C ≤ 6200 1≤C≤6200 1C6200,
1 ≤ T s , T e , R s , R e ≤ T 1≤Ts,Te,Rs,Re≤T 1Ts,Te,Rs,ReT,
1 ≤ C i ≤ 1000 1≤Ci≤1000 1Ci1000

输入样例

7 11 5 4
2 4 2
1 4 3
7 2 2
3 4 3
5 7 5
7 3 3
6 1 1
6 3 4
2 4 3
5 6 3
7 2 1

输出样例

7

题意

板题

思路

写了个SPFA和堆优化的Dijkstra,详见代码

代码

#include <bits/stdc++.h>using namespace std;typedef pair<int, int> PII;const int N = 2510, M = 6200 * 2 + 10;int n, m, S, T;
int h[N], e[M], w[M], ne[M], idx;
int dist[N], q[N];
bool st[N];void add(int a, int b, int c)
{e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
}void spfa() // SPFA算法
{memset(dist, 0x3f3f3f3f, sizeof dist);dist[S] = 0;queue<int> q;q.push(S);st[S] = true;while (q.size()){int t = q.front();q.pop();st[t] = false;for (int i = h[t]; ~i; i = ne[i]){int j = e[i];if (dist[j] > dist[t] + w[i]){dist[j] = dist[t] + w[i];if (!st[j]){q.push(j);st[j] = true;}}}}
}void dijkstra() // 堆优化Dijkstra
{memset(dist, 0x3f3f3f3f, sizeof dist);dist[S] = 0;priority_queue<PII, vector<PII>, greater<PII>> heap;heap.push({0, S});while (heap.size()){auto t = heap.top();heap.pop();int distance = t.first, ver = t.second;if (st[ver]) continue;st[ver] = true;for (int i = h[ver]; ~i; i = ne[i]){int j = e[i];if (dist[j] > dist[ver] + w[i]){dist[j] = dist[ver] + w[i];heap.push({dist[j], j});}}}
}int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n >> m >> S >> T;memset(h, -1, sizeof h);for (int i = 0; i < m; i ++ ){int a, b, c;cin >> a >> b >> c;add(a, b, c), add(b, a, c);}// todo 下面的选一个就可以 //spfa();dijkstra();cout << dist[T] << endl;
}

信使

原题链接

战争时期,前线有 n 个哨所,每个哨所可能会与其他若干个哨所之间有通信联系。

信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位)。

指挥部设在第一个哨所。

当指挥部下达一个命令后,指挥部就派出若干个信使向与指挥部相连的哨所送信。

当一个哨所接到信后,这个哨所内的信使们也以同样的方式向其他哨所送信。信在一个哨所内停留的时间可以忽略不计。

直至所有 n 个哨所全部接到命令后,送信才算成功。

因为准备充足,每个哨所内都安排了足够的信使(如果一个哨所与其他 k 个哨所有通信联系的话,这个哨所内至少会配备 k 个信使)。

现在总指挥请你编一个程序,计算出完成整个送信过程最短需要多少时间。

输入格式

第 1 行有两个整数 n 和 m,中间用 1 个空格隔开,分别表示有 n 个哨所和 m 条通信线路。

第 2 至 m+1 行:每行三个整数 i、j、k,中间用 1 个空格隔开,表示第 i 个和第 j 个哨所之间存在 双向 通信线路,且这条线路要花费 k 天。

输出格式

一个整数,表示完成整个送信过程的最短时间。

如果不是所有的哨所都能收到信,就输出-1。

数据范围

1 ≤ n ≤ 100 , 1≤n≤100, 1n100,
1 ≤ m ≤ 200 , 1≤m≤200, 1m200,
1 ≤ k ≤ 1000 1≤k≤1000 1k1000

输入样例

4 4
1 2 4
2 3 7
2 4 1
3 4 6

输出样例

11

题意

建图,指挥部在1

每个点可以给相邻点送信,求所有点都收到信的最短时间

如果有收不到信的,输出-1

思路

对于每个点来说:接收到信的时间等于他到指挥部的最短距离

因此可以分别求每个点的最短路径,求所有最短路径的最大值

如果有最短路径是正无穷,说明不能传过去,输出-1

下方代码使用Floyd算法

代码

#include <bits/stdc++.h>using namespace std;const int N = 110, INF = 0x3f3f3f3f;int n, m;
int d[N][N];int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n >> m;memset(d, 0x3f3f3f3f, sizeof d);for (int i = 1; i <= n; i ++ ) d[i][i] = 0;for (int i = 0; i < m; i ++ ){int a, b, c;cin >> a >> b >> c;d[a][b] = d[b][a] = min(d[a][b], c);}for (int k = 1; k <= n; k ++ )for (int i = 1; i <= n; i ++ )for (int j = 1; j <= n; j ++ )d[i][j] = min(d[i][j], d[i][k] + d[k][j]);int maxx = *max_element(d[1] + 1, d[1] + n + 1);if (maxx == 0x3f3f3f3f) cout << "-1";else cout << maxx;
}

香甜的黄油

原题链接

农夫John发现了做出全威斯康辛州最甜的黄油的方法:糖。

把糖放在一片牧场上,他知道 N 只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油。

当然,他将付出额外的费用在奶牛上。

农夫John很狡猾,就像以前的巴甫洛夫,他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场。

他打算将糖放在那里然后下午发出铃声,以至他可以在晚上挤奶。

农夫John知道每只奶牛都在各自喜欢的牧场(一个牧场不一定只有一头牛)。

给出各头牛在的牧场和牧场间的路线,找出使所有牛到达的路程和最短的牧场(他将把糖放在那)。

数据保证至少存在一个牧场和所有牛所在的牧场连通。

输入格式

第一行: 三个数:奶牛数 N,牧场数 P,牧场间道路数 C。

第二行到第 N+1 行: 1 到 N 头奶牛所在的牧场号。

第 N+2 行到第 N+C+1 行:每行有三个数:相连的牧场A、B,两牧场间距 D,当然,连接是双向的。

输出格式

共一行,输出奶牛必须行走的最小的距离和。

数据范围

1 ≤ N ≤ 500 , 1≤N≤500, 1N500,
2 ≤ P ≤ 800 , 2≤P≤800, 2P800,
1 ≤ C ≤ 1450 , 1≤C≤1450, 1C1450,
1 ≤ D ≤ 255 1≤D≤255 1D255

输入样例

3 4 5
2
3
4
1 2 1
1 3 5
2 3 7
2 4 3
3 4 5

输出样例

8

题意

若干头牛分别在不同牧场,找到一个牧场使所有牛到该牧场的总距离之和最小

思路

求以每个点为起点,其余点到该点的最短路之和

输出最小值

以下代码为堆优化Dijkstra

代码

#include <bits/stdc++.h>using namespace std;typedef pair<int, int> PII;const int N = 810, M = 3000, INF = 0x3f3f3f3f;int n, m, p;
int id[N];
int h[N], e[M], w[M], ne[M], idx;
int dist[N];
bool st[N];void add(int a, int b, int c)
{e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
}int dijkstra(int start)
{memset(dist, 0x3f3f3f3f, sizeof dist);memset(st, false, sizeof st);dist[start] = 0;priority_queue<PII, vector<PII>, greater<PII>> q;q.push({0, start});while (q.size()){auto t = q.top();q.pop();int distance = t.first, ver = t.second;if (st[ver]) continue;st[ver] = true;for (int i = h[ver]; ~i; i = ne[i]){int j = e[i];if (dist[j] > dist[ver] + w[i]){dist[j] = dist[ver] + w[i];q.push({dist[j], j});}}}// 遍历奶牛不是遍历牧场int res = 0;for (int i = 0; i < n; i ++ ){int j = id[i];if (dist[j] == INF) return INF;res += dist[j];}return res;
}int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n >> p >> m;for (int i = 0; i < n; i ++ ) cin >> id[i];// 存图memset(h, -1, sizeof h);for (int i = 0; i < m; i ++ ){int a, b, c;cin >> a >> b >> c;add(a, b, c), add(b, a, c);}// 取所有res中的最小值int res = INF;for (int i = 1; i <= p; i ++ ) res = min(res, dijkstra(i));cout << res;
}

最小花费

原题链接

在 n 个人中,某些人的银行账号之间可以互相转账。

这些人之间转账的手续费各不相同。

给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问 A 最少需要多少钱使得转账后 B 收到 100 元。

输入格式

第一行输入两个正整数 n,m,分别表示总人数和可以互相转账的人的对数。

以下 m 行每行输入三个正整数 x,y,z,表示标号为 x 的人和标号为 y 的人之间互相转账需要扣除 z% 的手续费 ( z<100 )。

最后一行输入两个正整数 A,B。

数据保证 A 与 B 之间可以直接或间接地转账。

输出格式

输出 A 使得 B 到账 100 元最少需要的总费用。

精确到小数点后 8 位。

数据范围

1 ≤ n ≤ 2000 , 1≤n≤2000, 1n2000,
m ≤ 105 m≤105 m105

输入样例

3 3
1 2 1
2 3 2
1 3 3
1 3

输出样例

103.07153164

题意

n个人互相转账,给出每两个人转账的手续费,询问A最少发出去多少钱使得B可以收到100

思路

将每个人看做点,权重是能传过去的百分比(比如说手续费3%,这条边的权重就是0.97),问题就变成了
100 = d ( A ) ∗ w 1 ∗ w 2 ∗ … ∗ w n 100=d(A)*w_1*w_2*…*w_n 100=d(A)w1w2wn
想让 d ( A ) d(A) d(A) 最小,就要让 w i w_i wi 最大
所以就是求最短路算法(但是是让权重之积最大)

下方代码为朴素版Dijkstra

代码

#include <bits/stdc++.h>using namespace std;const int N = 2010;int n, m, S, T;
double g[N][N];
double dist[N];
bool st[N];void dijkstra()
{dist[S] = 1;for (int i = 1; i <= n; i ++ ){int t = -1;for (int j = 1; j <= n; j ++ )if (!st[j] && (t == -1 || dist[t] < dist[j]))t = j;st[t] = true;for (int j = 1; j <= n; j ++ )dist[j] = max(dist[j], dist[t] * g[t][j]);}
}int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n >> m;memset(g, 0, sizeof g);while (m -- ){int a, b, c;cin >> a >> b >> c;double z = (100.0 - c) / 100;g[a][b] = g[b][a] = z;}cin >> S >> T;dijkstra();cout << fixed << setprecision(8) << 100 / dist[T];
}

最优乘车

原题链接

H 城是一个旅游胜地,每年都有成千上万的人前来观光。

为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴士线路。

每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站。

一名旅客最近到 H 城旅游,他很想去 S 公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达 S 公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士,这样换乘几次后到达 S 公园。

现在用整数 1,2,…N 给 H 城的所有的巴士站编号,约定这名旅客所在饭店的巴士站编号为 1,S 公园巴士站的编号为 N。

写一个程序,帮助这名旅客寻找一个最优乘车方案,使他在从饭店乘车到 S 公园的过程中换乘的次数最少。

输入格式

第一行有两个数字 M 和 N,表示开通了 M 条单程巴士线路,总共有 N 个车站。

从第二行到第 M+1 行依次给出了第 1 条到第 M 条巴士线路的信息,其中第 i+1 行给出的是第 i 条巴士线路的信息,从左至右按运行顺序依次给出了该线路上的所有站号,相邻两个站号之间用一个空格隔开。

输出格式

共一行,如果无法乘巴士从饭店到达 S 公园,则输出 NO,否则输出最少换乘次数,换乘次数为 0 表示不需换车即可到达。

数据范围

1 ≤ M ≤ 100 , 1≤M≤100, 1M100,
2 ≤ N ≤ 500 2≤N≤500 2N500

输入样例

3 7
6 7
4 7 3 6
2 1 3 5

输出样例

2

题意

给出多条公交车线路,求从起点到终点最少的换乘次数是多少

思路

这题的难度在建图上,如果有一条线路是 1->3->5->7,从1开始坐,不管做到3还是5还是7,都不需要换乘,因此可以将1向后面的所有点都连一条边

建完图直接BFS即可

代码

#include <bits/stdc++.h>using namespace std;const int N = 510;int m, n;
bool g[N][N];
int dist[N];
int stop[N];void bfs()
{memset(dist, 0x3f3f3f3f, sizeof dist);queue<int> q;q.push(1);dist[1] = 0;while (q.size()){int t = q.front();q.pop();for (int i = 1; i <= n; i ++ )if (g[t][i] && dist[i] > dist[t] + 1){dist[i] = dist[t] + 1;q.push(i);}}
}int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> m >> n;string line;getline(cin, line);while (m -- ){getline(cin, line);stringstream ssin(line);int cnt = 0, p;while (ssin >> p) stop[cnt ++ ] = p;for (int j = 0; j < cnt; j ++ )for (int k = j + 1; k < cnt; k ++ )g[stop[j]][stop[k]] = true;}bfs();if (dist[n] == 0x3f3f3f3f) cout << "NO\n";else cout << max(dist[n] - 1, 0) << endl;
}

昂贵的聘礼

原题链接

年轻的探险家来到了一个印第安部落里。

在那里他和酋长的女儿相爱了,于是便向酋长去求亲。

酋长要他用 10000 个金币作为聘礼才答应把女儿嫁给他。

探险家拿不出这么多金币,便请求酋长降低要求。

酋长说:”嗯,如果你能够替我弄到大祭司的皮袄,我可以只要 8000 金币。如果你能够弄来他的水晶球,那么只要 5000 金币就行了。”

探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西,他可以降低价格。

探险家于是又跑到其他地方,其他人也提出了类似的要求,或者直接用金币换,或者找到其他东西就可以降低价格。

不过探险家没必要用多样东西去换一样东西,因为不会得到更低的价格。

探险家现在很需要你的帮忙,让他用最少的金币娶到自己的心上人。

另外他要告诉你的是,在这个部落里,等级观念十分森严。

地位差距超过一定限制的两个人之间不会进行任何形式的直接接触,包括交易。

他是一个外来人,所以可以不受这些限制。

但是如果他和某个地位较低的人进行了交易,地位较高的的人不会再和他交易,他们认为这样等于是间接接触,反过来也一样。

因此你需要在考虑所有的情况以后给他提供一个最好的方案。

为了方便起见,我们把所有的物品从 1 开始进行编号,酋长的允诺也看作一个物品,并且编号总是 1。

每个物品都有对应的价格 P,主人的地位等级 L,以及一系列的替代品 Ti 和该替代品所对应的”优惠” Vi。

如果两人地位等级差距超过了 M,就不能”间接交易”。

你必须根据这些数据来计算出探险家最少需要多少金币才能娶到酋长的女儿。

输入格式

输入第一行是两个整数 M,N,依次表示地位等级差距限制和物品的总数。

接下来按照编号从小到大依次给出了 N 个物品的描述。

每个物品的描述开头是三个非负整数 P、L、X,依次表示该物品的价格、主人的地位等级和替代品总数。

接下来 X 行每行包括两个整数 T 和 V,分别表示替代品的编号和”优惠价格”。

输出格式

输出最少需要的金币数。

数据范围

1 ≤ N ≤ 100 , 1≤N≤100, 1N100,
1 ≤ P ≤ 10000 , 1≤P≤10000, 1P10000,
1 ≤ L , M ≤ N , 1≤L,M≤N, 1L,MN,
0 ≤ X < N 0≤X<N 0X<N

输入样例

1 4
10000 3 2
2 8000
3 5000
1000 2 1
4 200
3000 2 1
4 200
50 2 0

输出样例

5250

题意

有个人想娶酋长的女儿,酋长需要指定数量金钱的聘礼,或者拿一样东西和少一点的金钱替代,这样东西的所有者需要指定的金钱换这样东西,或者拿另一样东西和少一点的金钱代替,以此类推…同时,所有者阶级超过指定数字的不能间接交易,现在给出所有东西的价值、替代方式和所有者阶级,求这个人最少用多少钱能娶到酋长的女儿

思路

题目很难读懂,读懂后发现难点还是在建图上,我们把每样物品看作一个点,根据样例可以建出以下图:
在这里插入图片描述
此时设置一个虚拟源点,所有情况都从虚拟源点开始,得到以下图:
在这里插入图片描述
从虚拟源点开始求到点1的最短路即可

那么阶级问题怎么考虑呢?

注意到阶级最高只有100,如果阶级限制是1的话,最多也只有100种划分情况,所以直接枚举所有的阶级划分就可以了

代码

#include <bits/stdc++.h>using namespace std;const int N = 110;int n, m;
int w[N][N], level[N];
int dist[N];
bool st[N];int dijkstra(int down, int up)
{memset(dist, 0x3f3f3f3f, sizeof dist);memset(st, 0, sizeof st);dist[0] = 0;for (int i = 1; i <= n; i ++ ){int t = -1;for (int j = 0; j <= n; j ++ )if (!st[j] && (t == -1 || dist[t] > dist[j]))t = j;st[t] = true;for (int j = 1; j <= n; j ++ ) // 更新所有在阶级区间范围内且与t有邻边的点if (w[t][j] != 0x3f3f3f3f && level[j] >= down && level[j] <= up)dist[j] = min(dist[j], dist[t] + w[t][j]);}return dist[1];
}int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> m >> n;// 存图memset(w, 0x3f3f3f3f, sizeof w);for (int i = 0; i <= n; i ++ ) w[i][i] = 0;for (int i = 1; i <= n; i ++ ){int price, cnt;cin >> price >> level[i] >> cnt;w[0][i] = min(price, w[0][i]);while (cnt -- ){int id, cost;cin >> id >> cost;w[id][i] = min(w[id][i], cost);}}int res = 0x3f3f3f3f;for (int i = level[1] - m; i <= level[1]; i ++ )res = min(res, dijkstra(i, i + m));cout << res;
}

相关文章:

【图论】单源最短路

算法提高课笔记。&#xff08;本篇还未更新完… 目录 单源最短路的建图方式例题热浪题意思路代码 信使题意思路代码 香甜的黄油题意思路代码 最小花费题意思路代码 最优乘车题意思路代码 昂贵的聘礼题意思路代码 单源最短路的建图方式 最短路问题可以分为以下两类&#xff1a…...

闻道网络:2023宠物消费网络营销洞察数据报告(附下载)

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 行业持续升级&#xff0c;增速放缓&#xff0c;正朝着多元化和专业化的方向发展&#xff1b;自公共事件以来&#xff0c;因&#xff0c;“猫不用遛”&#xff0c;养猫人士增速迅猛反超犬主人&#xf…...

Docker 安装和架构说明

Docker 并非是一个通用的容器工具&#xff0c;它依赖于已存在并运行的Linux内核环境。 Docker实质上是在已经运行的Liunx下制造了一个隔离的文件环境&#xff0c;因此他的执行效率几乎等同于所部署的linux主机。因此Docker必须部署在Linux内核系统上。如果其他系统想部署Docke…...

101. 对称二叉树

题目 原题链接 : 101.对称二叉树 题面 : 对于这一题呢&#xff0c;题目要求给出递归和迭代两种方式来解决!!! 注 : 这一题不仅仅是判断左右两个子节点是否对称,而是要遍历两棵树而且要比较内侧和外侧节点 递归 先确认递归三要素 : 确定递归函数的参数和返回值 bool …...

cmake应用:集成gtest进行单元测试

编写代码有bug是很正常的&#xff0c;通过编写完备的单元测试&#xff0c;可以及时发现问题&#xff0c;并且在后续的代码改进中持续观测是否引入了新的bug。对于追求质量的程序员&#xff0c;为自己的代码编写全面的单元测试是必备的基础技能&#xff0c;在编写单元测试的时候…...

静态时序分析与时序约束

一、时序分析的基本概念 1. 时钟 理性的时钟模型是一个占空比为50%且周期固定的方波&#xff1a; 实际电路中输入给FPGA的晶振时钟信号是正弦波&#xff1a; 2. 时钟抖动 Clock Jitter&#xff0c;时钟抖动&#xff0c;相对于理想时钟沿&#xff0c;实际时钟存在不随时钟存在…...

YOLOv5基础知识入门(3)— 目标检测相关知识点

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLO算法发展历程和YOLOv5核心基础知识学习完成之后&#xff0c;接下来我们就需要学习目标检测相关知识了。为了让大家后面可以顺利地用YOLOv5进行目标检测实战&#xff0c;本节课就带领大家学习一下目标检测的基础知识点&…...

10个AI绘图生成器让绘画更简单

AI不仅影响商业和医疗保健等行业&#xff0c;还在创意产业中发挥着越来越大的作用&#xff0c;开创了AI绘画生成器新时代。在绘画领域当然也是如此&#xff0c;与传统的绘画工具不同&#xff0c;AI人工智能时代的绘画工具是全自动的、智能的&#xff0c;甚至可以说是“傻瓜式”…...

干货满满的Python知识,学会这些你也能成为大牛

目录 1. 爬取网站数据 2. 数据清洗与处理 3. 数据可视化 4. 机器学习模型训练 5. 深度学习模型训练 6. 总结 1. 爬取网站数据 在我们的Python中呢&#xff0c;使用爬虫可以轻松地获取网站的数据。可以使用urllib、requests、BeautifulSoup等库进行数据爬取和处理。以下是…...

【Leetcode】155. 最小栈、JZ31 栈的压入、弹出序列

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 155. 最小栈 155. 最小栈 题目描述; 设计一个支持 push &#xff0c;pop &#xff0c;top …...

网络安全(黑客技术)自学笔记

一、什么是网络安全&#xff1f;什么是黑客&#xff1f; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等…...

iOS学习—制作全局遮罩

在.h文件中线声明show()方法 - (void)show; .m文件中添加全屏遮罩&#xff0c;在遮罩上添加了一个选择框并添加了底部弹出的动画&#xff0c;可自行在其中添加tableview、pickerview等其他视图&#xff0c;并添加了点击选择框视图外区域隐藏 #import "MaskView.h"…...

GRPC-连接池-GPT

gRPC Dart 管理优化 User grpc for dart 如何统一管理多个Client的创建和销毁&#xff0c;给我一个最优解 ChatGPT 对于在Dart中使用gRPC创建和销毁多个Client的统一管理&#xff0c;您可以使用一个单例模式的管理类来实现最优解。 首先&#xff0c;创建一个管理类&#xff0c…...

YOLOv5、YOLOv8改进: GSConv+Slim Neck

论文题目&#xff1a;Slim-neck by GSConv: A better design paradigm of detector architectures for autonomous vehicles 论文&#xff1a;https://arxiv.org/abs/2206.02424 代码&#xff1a;https://github.com/AlanLi1997/Slim-neck-by-GSConv 在计算机视觉领域&#x…...

重发布选路问题

一、思路 &#xff1b; 1.增加不优选路开销解决选路不佳问题 2.用增加开销的方式使R1 不将ASBR传的R7传给另一台ASBR解决R1、R2、R3、R4pingR7环回环路 二、操作 ------IP地址配置如图 1.ospf及rip的宣告 rip&#xff1a; [r1]rip 1 [r1-rip-1]version 2 [r1-rip-1]netw…...

LinearAlgebraMIT_9_LinearIndependence/SpanningASpace/Basis/Dimension

这节课我们主要学习一下(Linear Independence)线性无关&#xff0c;(spanning a space)生成空间&#xff0c;(basis)基和(dimension)维度。同时我们要注意这四个很重要的基本概念的描述对象&#xff0c;我们会说向量组线性无关&#xff0c;由一个向量组生成的空间&#xff0c;子…...

Redission 解锁异常:attempt to unlock lock, not locked by current thread by node id

标题&#xff1a;解锁异常&#xff1a;Redission中的"attempt to unlock lock, not locked by current thread by node id"问题分析与解决方案 在分布式系统中&#xff0c;锁是常用的同步机制&#xff0c;用于保护共享资源&#xff0c;避免并发冲突。Redission是一个…...

AIGC技术揭秘:探索火热背后的原因与案例

文章目录 什么是AIGC技术&#xff1f;为何AIGC技术如此火热&#xff1f;1. 提高效率与创造力的完美结合2. 拓展应用领域&#xff0c;创造商业价值3. 推动技术创新和发展 AIGC技术案例解析1. 艺术创作&#xff1a;生成独特的艺术作品2. 内容创作&#xff1a;实时生成各类内容3. …...

【Linux】总结1-命令工具

文章目录 基础指令shell命令以及运行原理Linux权限粘滞位工具 基础指令 ls、pwd、touch、mkdir、netstat、cp、mv、cd、tar、zip、unzip、grep、pstack、ps、rm、cat、more、less、head、tail、find、ulimit -a、clear、whoami、man touch&#xff1a;创建文件&#xff0c;也包…...

Git远程仓库

Git远程仓库 推送拉取git fetchgit pull 克隆 推送 Git是分布式版本控制系统&#xff0c;同一个Git仓库&#xff0c;可以分布到不同的机器上。那要怎么实现这种分布呢&#xff1f;我们可以找一台电脑充当服务器&#xff0c;也就是扮演远程仓库的角色&#xff0c;一直都处于开机…...

MS39531N 是一款正弦驱动的三相无感直流电机驱动器,具有最小振动和高效率的特点

MS39531N 是一款正弦驱动的三相无感直流电机驱动器&#xff0c;具有最小振动和高效率的特点 简述 MS39531 是一款正弦驱动的 三相无感直流电机驱动器 &#xff0c;具有最小振动和高效率的特点。该驱动器内部集成了基本的闭环速度控制功能&#xff0c;能够根据特定的应用定制电…...

大数据Spark(六十一):Spark基于Standalone提交任务流程

文章目录 Spark基于Standalone提交任务流程 一、Standalone-Client模式 1、提交命令 2、任务执行流程 二、Standalone-Cluster模式 1、提交命令 2、任务执行流程 Spark基于Standalone提交任务流程 在Standalone模式下&#xff0c;Spark的任务提交根据Driver程序运行的位…...

性能优化笔记

性能优化转载 https://www.cnblogs.com/tengzijian/p/17858112.html 性能优化的一般策略及方法 简言之&#xff0c;非必要&#xff0c;不优化。先保证良好的设计&#xff0c;编写易于理解和修改的整洁代码。如果现有的代码很糟糕&#xff0c;先清理重构&#xff0c;然后再考…...

9.进程间通信

1.简介 为啥要有进程间通信&#xff1f; 如果未来进程之间要协同呢&#xff1f;一个进程要把自己的数据交给另一个进程&#xff01;进程是具有独立性的&#xff0c;所以把一个进程的数据交给另一个进程----基本不可能&#xff01;必须通信起来&#xff0c;就必须要有另一个人…...

|从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面

&#x1f411; |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 &#x1f411; 文章目录 &#x1f411; |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 &#x1f411;♈前言♈♈调取Deepseek大模型♈♒准备工作♒♒调用API♒ ♈将模型嵌入到ui界面中♈♈…...

ReLU 新生:从死亡困境到强势回归

背景 在深度学习领域&#xff0c;激活函数的探索已成为独立研究课题。诸如 GELU、SELU 和 SiLU 等新型激活函数&#xff0c;因具备平滑梯度与出色的收敛特性&#xff0c;正备受关注。经典 ReLU 凭借简洁性、固有稀疏性及其独特优势拓扑特性&#xff0c;依旧受青睐。然而&#…...

GOOUUU ESP32-S3-CAM 果云科技开发板开发指南(一)(超详细!)Vscode+espidf 通过摄像头拍摄照片并存取到SD卡中,文末附源码

看到最近好玩的开源项目比较多&#xff0c;就想要学习一下esp32的开发&#xff0c;目前使用比较多的ide基本上是arduino、esp-idf和platformio&#xff0c;前者编译比较慢&#xff0c;后两者看到开源大佬的项目做的比较多&#xff0c;所以主要学习后两者。 本次使用的硬件是GO…...

从golang的sync.pool到linux的slab分配器

最近学习golang的时候&#xff0c;看到golang并发编程中有一个sync.pool&#xff0c;即对象池&#xff0c;猛地一看这不跟linux的slab分配器类似嘛&#xff0c;赶紧学习记录下 这里先总结下设计sync.pool和slab的目的 sync.pool 为了缓解特定类型的对象频繁创建和销毁&#x…...

AI生成的基于html+marked.js实现的Markdown转html工具,离线使用,可实时预览 [

有一个markdown格式的文档&#xff0c;手头只有notepad的MarkdownPanel插件可以预览&#xff0c;但是只能预览&#xff0c;不能直接转换为html文件下载&#xff0c;直接复制预览的内效果又不太好&#xff0c;度娘也能找到很多工具&#xff0c;但是都需要在线使用。所以考虑用AI…...

【Java后端基础 005】ThreadLocal-线程数据共享和安全

&#x1f4da;博客主页&#xff1a;代码探秘者 ✨专栏&#xff1a;文章正在持续更新ing… ✅C语言/C&#xff1a;C&#xff08;详细版&#xff09; 数据结构&#xff09; 十大排序算法 ✅Java基础&#xff1a;JavaSE基础 面向对象大合集 JavaSE进阶 Java版数据结构JDK新特性…...