三、搜索与图论

DFS

排列数字

在这里插入图片描述

#include<iostream>
using namespace std;
const int N = 10;
int a[N], b[N];
int n;void dfs(int u){if(u > n){for(int i = 1; i <= n; i++)cout<<a[i]<<" ";cout<<endl;return;}for(int i = 1; i <= n; i++){if(!b[i]){b[i] = 1;a[u] = i;dfs(u + 1);b[i] = 0;}}
}int main(){cin>>n;dfs(1);return 0;
}

n-皇后问题

在这里插入图片描述

#include<iostream>
using namespace std;
const int N = 20;
char g[N][N];
int a[N], b[N], c[N];
int n;void dfs(int u){if(u > n){for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++)cout<<g[i][j];cout<<endl;}cout<<endl;return;}for(int i = 1; i <= n; i++){if(!a[i] && !b[u + i] && !c[-u + i + n]){a[i] = b[u + i] = c[-u + i + n] = 1;g[u][i] = 'Q';dfs(u + 1);g[u][i] = '.';a[i] = b[u + i] = c[-u + i + n] = 0;}}
}int main(){cin>>n;for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)g[i][j] = '.';dfs(1);return 0;
}

BFS

走迷宫

在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
const int N = 110;
int g[N][N], d[N][N];
pair<int, int> q[N * N];
int hh, tt = - 1;
int n, m;int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};void bfs(int x, int y){memset(d, -1, sizeof(d));q[++tt] = make_pair(x, y);d[x][y] = 0;while(hh <= tt){auto t = q[hh++];for(int i = 0; i < 4; i++){int a = dx[i] + t.first, b = dy[i] + t.second;if(a < 1 || a > n || b < 1 || b > m) continue;if(d[a][b] != -1) continue;if(g[a][b] != 0) continue;d[a][b] = d[t.first][t.second] + 1;q[++tt] = make_pair(a, b);}}cout<<d[n][m];
}int main(){cin>>n>>m;for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)cin>>g[i][j];bfs(1, 1);return 0;
} 

八数码

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

#include<iostream>
#include<unordered_map>
using namespace std;
const int N = 1e6; //一共有9!种情况
unordered_map<string, int> d;
string q[N];
int hh, tt = -1;
int n = 9;int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};int bfs(string s){q[++tt] = s;d[s] = 0;//记录终点string end = "12345678x";while(hh <= tt){string t = q[hh++];//存储当前位置到起点的距离int dis = d[t];//如果到终点了,那就返回距起点距离if(t == end) return dis;//查找x的下标int k = t.find('x');//x在矩阵中的位置int x = k / 3, y = k % 3;for(int i = 0; i < 4; i++){int a = x + dx[i], b = y + dy[i];if(a < 0 || a > 2 || b < 0 || b > 2) continue;//转移xswap(t[k], t[3 * a + b]);//如果没有遍历过,那就存储到队列中if(!d.count(t)){d[t] = dis + 1;q[++tt] = t;}//还原swap(t[k], t[3 * a + b]);}}return -1;
}int main(){char c;string s = "";for(int i = 0; i < n; i++){cin>>c;s += c;}cout<<bfs(s);return 0;
}

树和图的存储

树是一种特殊的图
存储可以用链式向前星或者vector

//链式向前星
#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e5 + 10, M = 2 * N;
int h[N], e[N], ne[N], idx;
int st[N];void add(int a, int b){e[idx] = b;ne[idx] = h[a];h[a] = idx;idx++;
}void dfs(int u){st[u] = 1;for(int i = u; i != -1; i = ne[i]){int j = e[i];if(!st[j]) dfs(j);}
}int main(){memset(h, -1, sizeof(h));return 0;
}//vector存储
#include<iostream>
#include<vector>
using namespace std;
const int N = 1e5 + 10;
vector<int> v[N];
int st[N];void add(int a, int b){v[a].push_back(b);v[b].push_back(a);
}void dfs(int u){st[u] = 1;for(int i = 0; i < v[u].size(); i++){int j = v[u][i];if(!st[j]) dfs(j);}
}int main(){return 0;
}

树与图的深度优先遍历

树的重心

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

#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e5 + 10, M = 2 * N;
int h[N], e[M], ne[M], idx;
int st[N];
int n, ans = 1e9;void add(int a, int b){e[idx] = b;ne[idx] = h[a];h[a] = idx;idx++;
}int dfs(int u){st[u] = 1;//cnt存储以u为根的节点数(包括u),res是删除掉某个节点后的最大连通子图节点数int cnt = 1, res = 0; for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(!st[j]){//以u为节点的单棵子树的节点数int t = dfs(j);//计算以j为根的树的节点数cnt += t;//记录最大连通子图节点数res = max(res, t);}}//以u为重心,最大的连通子图节点数res = max(res, n - cnt);ans = min(ans, res);return cnt;
}int main(){memset(h, -1, sizeof(h));cin>>n;int a, b;for(int i = 0; i < n - 1; i++){cin>>a>>b;add(a, b);add(b, a);}dfs(1);cout<<ans;return 0;
}

树与图的宽度优先遍历

图中点的层次

在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e5 + 10, M = 2 * N;
int h[N], e[M], ne[M], idx;
int q[N], d[N], hh, tt = -1;
int n, m;void add(int a, int b){e[idx] = b;ne[idx] = h[a];h[a] = idx;idx++;
}void bfs(int u){memset(d, -1, sizeof(d));q[++tt] = u;d[u] = 0;while(hh <= tt){//使用队头,弹出队头int t = q[hh++];for(int i = h[t]; i != -1; i = ne[i]){int j = e[i];if(d[j] == -1){//更新距离d[j] = d[t] + 1;//入队q[++tt] = j;}}}cout<<d[n];
}int main(){memset(h, -1, sizeof(h));cin>>n>>m;int x, y;while(m--){cin>>x>>y;add(x, y);}bfs(1);return 0;
}

拓扑排序

有向无环图也是拓扑图
入度:有多少条边指向自己
出度:有多少条边出去

有向图的拓扑序列

在这里插入图片描述
入度为0就是起点,出度为0就是终点

#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e5 + 10;
int h[N], e[N], ne[N], idx;
int q[N], hh, tt = -1;
int n, m;
int r[N]; //存储入度void add(int a, int b){e[idx] = b;ne[idx] = h[a];h[a] = idx;idx++;
}void bfs(){//判断哪些点入度为0for(int i = 1; i <= n; i++)if(!r[i]) q[++tt] = i;while(hh <= tt){int t = q[hh++];for(int i = h[t]; i != -1; i = ne[i]){int j = e[i];r[j]--;if(!r[j]) q[++tt] = j;}}if(tt == n - 1){for(int i = 0; i <= tt; i++) cout<<q[i]<<" ";}else cout<<-1;
}int main(){memset(h, -1, sizeof(h));cin>>n>>m;int x, y;while(m--){cin>>x>>y;add(x, y);r[y]++;}bfs();return 0;
}

最短路

帮助理解
在这里插入图片描述

Dijkstra

Dijkstra求最短路 I

在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
const int N = 510;
int g[N][N], d[N], b[N];
int n, m;void dijkstra(int u){memset(d, 0x3f, sizeof(d));d[u] = 0;for(int i = 0; i < n; i++){int t = -1;for(int j = 1; j <= n; j++)if(!b[j] && (t == -1 || d[t] > d[j])) t = j;b[t] = 1;for(int j = 1; j <= n; j++)d[j] = min(d[j], d[t] + g[t][j]);}cout<<((d[n] == 0x3f3f3f3f) ? -1 : d[n]);
}int main(){memset(g, 0x3f, sizeof(g));cin>>n>>m;int x, y, z;while(m--){cin>>x>>y>>z;g[x][y] = min(g[x][y], z);}dijkstra(1);return 0;
}

Dijkstra求最短路 II

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N = 2e5;
int h[N], e[N], ne[N], w[N], idx; //w[i]存储上个点到i的距离
int d[N], b[N];
int n, m;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q; //小根堆,第一个元素存储距离,第二个元素存储下标void add(int x, int y, int z){e[idx] = y;w[idx] = z;ne[idx] = h[x];h[x] = idx;idx++;
}void dijkstra(int u){memset(d, 0x3f, sizeof(d));d[u] = 0;q.push(make_pair(0, 1));while(q.size()){auto t = q.top();q.pop();int x = t.first, y = t.second;if(b[y]) continue; //如果遍历过就退出b[y] = 1;for(int i = h[y]; i != -1; i = ne[i]){int j = e[i];if(d[j] > x + w[i]){d[j] = x + w[i];q.push(make_pair(d[j], j));}}}cout<<(d[n] == 0x3f3f3f3f ? -1 : d[n]);
}int main(){memset(h, -1, sizeof(h));cin>>n>>m;int x, y, z;while(m--){cin>>x>>y>>z;add(x, y, z);}dijkstra(1);return 0;
}

增加点权,求有多少条最短路

题目链接

#include<iostream>
#include<cstring>
using namespace std;
int g[505][505], dis[505], st[505];
int a[505], paths[505], teams[505];
int n, m, c1, c2;void dj(int u){teams[u] = a[u];paths[u] = 1;dis[u] = 0;for(int j = 0; j < n; j++){int t = -1;for(int i = 0; i < n; i++){if(!st[i] && (t == -1 || dis[t] > dis[i])){t = i;}}st[t] = 1;for(int i = 0; i < n; i++){if(dis[i] > dis[t] + g[t][i]){dis[i] = dis[t] + g[t][i]; paths[i] = paths[t]; //继承路径条数teams[i] = teams[t] + a[i]; //更新救援队人数}else if(dis[i] == dis[t] + g[t][i]){if(teams[i] < teams[t] + a[i]){teams[i] = teams[t] + a[i]; //选救援队人数更多的} paths[i] += paths[t]; //累加路径条数}}}
}int main(){memset(g, 0x3f, sizeof(g));cin>>n>>m>>c1>>c2;for(int i = 0; i < n; i++) cin>>a[i];while(m--){int x, y, z;cin>>x>>y>>z;g[x][y] = g[y][x] = min(g[x][y], z);}memset(dis, 0x3f, sizeof(dis));dj(c1);cout<<paths[c2]<<" "<<teams[c2];return 0;
}

增加边权,求花费最少

题目链接

#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
int g[505][505], dis[505], st[505];
int cost[505][505], c[505], pre[505];
vector<int> path;
int n, m, s, d;void dj(int u){dis[u] = 0;c[u] = 0;for(int i = 0; i < n; i++){int t = -1;for(int j = 0; j < n; j++){if(!st[j] && (t == -1 || dis[t] > dis[j])){t = j;}}st[t] = 1;for(int j = 0; j < n; j++){if(dis[j] > dis[t] + g[t][j]){pre[j] = t;dis[j] = dis[t] + g[t][j];c[j] = c[t] + cost[t][j];}else if(dis[j] == dis[t] + g[t][j] && c[j] > c[t] + cost[t][j]){pre[j] = t;c[j] = c[t] + cost[t][j];}}}
}int main(){memset(g, 0x3f, sizeof(g));memset(dis, 0x3f, sizeof(dis));memset(c, 0x3f, sizeof(c));memset(cost, 0x3f, sizeof(cost));cin>>n>>m>>s>>d;while(m--){int x, y, z, h;cin>>x>>y>>z>>h;g[x][y] = g[y][x] = min(g[x][y], z);cost[x][y] = cost[y][x] = min(cost[x][y], h);}for(int i = 0; i < n; i++) pre[i] = i;dj(s);int q = d;while(q != s){path.push_back(q);q = pre[q];}path.push_back(s);int p = path.size();for(int i = p - 1; i >= 0; i--) cout<<path[i]<<" ";cout<<dis[d]<<" "<<c[d];return 0;
}

bellman-ford

有边数限制的最短路

如果负环在1到n的路径上,那就不存在最短路

#include<iostream>
#include<cstring>
using namespace std;
const int N = 510, M = 1e4 + 10;
int d[N], b[N]; //b数组备份
int n, m, k;
struct E{int x, y, z;
}e[M];void bellman_ford(int u){memset(d, 0x3f, sizeof(d));d[u] = 0;//最多k条边for(int i = 0; i < k; i++){//每次只更新一条串联路径,防止更新了多条串联路径memcpy(b, d, sizeof(d));for(int j = 0; j < m; j++){int x = e[j].x, y = e[j].y, z = e[j].z;d[y] = min(d[y], b[x] + z);}}if(d[n] > 0x3f3f3f3f / 2) cout<<"impossible";else cout<<d[n];
}int main(){cin>>n>>m>>k;int x, y, z;for(int i = 0; i < m; i++){cin>>x>>y>>z;e[i] = {x, y, z};}bellman_ford(1);return 0;
}

spfa

spfa求最短路

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

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N = 1e5 + 10;
int h[N], e[N], ne[N], w[N], idx;
int dis[N], st[N];
int q[N], hh, tt = -1;
int n, m;void add(int x, int y, int z){e[idx] = y;w[idx] = z;ne[idx] = h[x];h[x] = idx;idx++;
}void spfa(int u){memset(dis, 0x3f, sizeof(dis));dis[u] = 0;q[++tt] = u;st[u] = 1;while(hh <= tt){int t = q[hh++];//有环,所以可能一个点会遍历两次st[t] = 0;for(int i = h[t]; i != -1; i = ne[i]){int j = e[i];if(dis[j] > dis[t] + w[i]){dis[j] = dis[t] + w[i];if(!st[j]){q[++tt] = j;st[j] = 1;}}}}if(dis[n] == 0x3f3f3f3f) cout<<"impossible";else cout<<dis[n];
}int main(){memset(h, -1, sizeof(h));cin>>n>>m;int x, y, z;for(int i = 0; i < m; i++){cin>>x>>y>>z;add(x, y, z);}spfa(1);return 0;
}

spfa判断负环

#include<iostream>
#include<cstring>
using namespace std;
const int N = 2e3 + 10, M = 1e4 + 10;;
int h[N], e[M], ne[M], w[M], idx;
int dis[N], st[N], cnt[N];
int q[N * N], hh, tt = -1; //有环的时候,一个元素可能会一直插入队列,所以要开N * N
int n, m;void add(int x, int y, int z){e[idx] = y;w[idx] = z;ne[idx] = h[x];h[x] = idx;idx++;
}void spfa(){//存在的负权回路,不一定从1开始for(int i = 1; i <= n; i++){q[++tt] = i;st[i] = 1;}while(hh <= tt){int t = q[hh++];//有环,所以可能一个点会遍历两次st[t] = 0;for(int i = h[t]; i != -1; i = ne[i]){int j = e[i];if(dis[j] > dis[t] + w[i]){dis[j] = dis[t] + w[i];cnt[j] = cnt[t] + 1;if(cnt[j] >= n){cout<<"Yes";return;}if(!st[j]){q[++tt] = j;st[j] = 1;}}}}cout<<"No";
}int main(){memset(h, -1, sizeof(h));cin>>n>>m;int x, y, z;for(int i = 0; i < m; i++){cin>>x>>y>>z;add(x, y, z);}spfa();return 0;
}

Floyd

Floyd求最短路

f(k, i, j) = f(k - 1, i, k) + f(k - 1, k, j);

#include<iostream>
using namespace std;
const int N = 210;
int f[N][N];
int n, m, k;void floyd(){for(int k = 1; k <= n; k++)for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
}int main(){cin>>n>>m>>k;for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)if(i == j) f[i][j] = 0;else f[i][j] = 0x3f3f3f3f;int x, y, z;for(int i = 1; i <= m; i++){cin>>x>>y>>z;f[x][y] = min(f[x][y], z);}floyd();for(int i = 1; i <= k; i++){cin>>x>>y;//可能存在负权边if(f[x][y] > 0x3f3f3f3f / 2) cout<<"impossible"<<endl;else cout<<f[x][y]<<endl;}return 0;
}

最小生成树

在这里插入图片描述

Prim

Kruskal

二分图

在这里插入图片描述

染色法判定二分图

匈牙利算法

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

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

相关文章

自己DIY制作耳机壳一般用哪种材料比较好,性价比比较高

在选择耳机壳的材料时&#xff0c;除了考虑材料本身的性能外&#xff0c;还需要考虑成本、加工难度、耐用性、环保性等方面的因素。 从性能方面来看&#xff1a; 制作耳机壳的UV树脂和塑料材质各有其优缺点。UV树脂具有高硬度、耐磨、耐高温、环保等优点&#xff0c;能够提供更…

【FFmpeg】ffplay 命令行参数 ⑤ ( 设置音频滤镜 -af 参数 | 设置统计信息 -stats 参数 | 设置同步时钟类型 -sync 参数 )

文章目录 一、ffplay 命令行参数 - 音频滤镜1、设置音频滤镜 -af 参数2、常用的 音频滤镜 参数3、音频滤镜链 示例 二、ffplay 命令行参数 - 统计信息1、设置统计信息 -stats 参数2、关闭统计信息 -nostats 参数 三、ffplay 命令行参数 - 同步时钟类型1、设置同步时钟类型 -syn…

【前沿技术杂谈:多模态文档基础模型】使用多模态文档基础模型彻底改变文档 AI

【前沿技术杂谈&#xff1a;多模态文档基础模型】使用多模态文档基础模型彻底改变文档 AI 从文本到多模态模型&#xff1a;文档 AI 逐渐发展新技能。行业领先的型号Document AI 的下一步&#xff1a;开发通用和统一框架 您是否曾经被包含不同信息&#xff08;如应付账款、日期、…

Web后端开发:事务与AOP

事务管理 在学习数据库时&#xff0c;讲到&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求&#xff0c;要么同时成功&#xff0c;要么同时失败。 事务的操作主要有三…

C#向数组指定索引位置插入新的元素值:自定义插入方法 vs List<T>.Add(T) 方法

目录 一、使用的方法 1.自定义插入方法 2.使用List.Add(T) 方法 二、实例 1.示例1&#xff1a;List.Add(T) 方法 2.示例&#xff1a;自定义插入方法 一、使用的方法 1.自定义插入方法 首先需要定义一个一维数组&#xff0c;然后修改数组的长度(这里使用Length属性获取…

网关中全局过滤器实现jwt校验

意味着有很多相同接口的实现类&#xff0c;那么必定会有优先级的问题。于是Spring就提供了Ordered这个接口&#xff0c;来处理相同接口实现类的优先级问题。 public class AuthorizeFilter implements Ordered, GlobalFilter {Overridepublic Mono<Void> filter(ServerW…

Linux应用程序几种参数传递方式

大家好&#xff0c;今天给大家介绍Linux应用程序几种参数传递方式&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 在Linux中&#xff0c;应用程序可以通过多种方式接收参数。以下…

栈的基本操作

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

【Java面试】数据类型常见面试题

什么是包装类型 将基本类型包装进了对象中得到的类型 基本类型和包装类型有什么区别 用途不同&#xff1a;基本类型一般用于局部变量&#xff0c;包装类型用于其他地方存储方式不同&#xff1a;用于局部变量的基本类型存在虚拟机栈中的局部变量表中&#xff0c;用于成员变量…

物联网数据隐私保护技术

在物联网&#xff08;IoT&#xff09;的世界中&#xff0c;无数的设备通过互联网连接在一起&#xff0c;不断地收集、传输和处理数据。这些数据有助于提高生产效率、优化用户体验并创造新的服务模式。然而&#xff0c;随着数据量的剧增&#xff0c;数据隐私保护成为了一个不能忽…

力扣刷题之旅:进阶篇(三)

力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目&#xff0c;以及它们的解题代码。 --点击进入刷题地址 一、动态规划&#xff08;DP&#xff09; 首先&#xff0c;让我们来…

《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(10)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述&#xff08;9&#xff09; 4.2 PCIe体系结构的组成部件 PCIe总线作为处理器系统的局部总线&#xff0c;其作用与PCI总线类似&#xff0c;主要目的是为了连接处理器系统中的外部设备&…

【机器学习】基于集成学习的 Amazon 用户评论质量预测

实验六: 基于集成学习的 Amazon 用户评论质量预测 1 案例简介 ​ 随着电商平台的兴起&#xff0c;以及疫情的持续影响&#xff0c;线上购物在我们的日常生活中扮演着越来越重要的角色。在进行线上商品挑选时&#xff0c;评论往往是我们十分关注的一个方面。然而目前电商网站的…

Golang的for循环变量和goroutine的陷阱,1.22版本的更新

先来看一段golang 1.22版本之前的for循环的代码 package mainimport "fmt"func main() {done : make(chan bool)values : []string{"chen", "hai", "feng"}for _, v : range values {fmt.Println("start")go func() {fmt.P…

【05】C++ 内存管理

文章目录 &#x1f308; Ⅰ C 内存分布&#x1f308; Ⅱ C 内存管理方式1. new 和 delete 操作内置类型2. new 和 delete 操作自定义类型 &#x1f308; Ⅲ operator new 和 operator delete&#x1f308; Ⅳ new 和 delete 的实现原理1. 内置数据类型2. 自定义数据类型 &#…

过渡效果的艺术:CSS transition 让网页交互更平滑(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

使用人工智能将扫描地图中的数据数字化

Bunting Labs 推出了新版本QGIS AI 地图追踪插件&#xff0c;这是一款由人工智能驱动的自动数字化扫描地图和平面图特征的工具。Egan 和联合创始人 Brendan Ashworth 开发了这个插件&#xff0c;以快速加快从扫描地图和平面图中提取地理特征的过程。 通常&#xff0c;从 PDF 中…

飞天使-linux操作的一些技巧与知识点9-zabbix6.0 容器之纸飞机告警设置

文章目录 zabbix 告警纸飞机方式webhook 方式 zabbix 告警纸飞机方式 第一种方式参考 https://blog.csdn.net/yetugeng/article/details/99682432bash-4.4$ cat telegram.sh #!/bin/bashMSG$1TOKEN"61231432278:AAsdfsdfsdfsdHUxBwPSINc2kfOGhVik" CHAT_ID-41dsdde…

EMNLP 2023精选:Text-to-SQL任务的前沿进展(下篇)——Findings论文解读

导语 本文记录了今年的自然语言处理国际顶级会议EMNLP 2023中接收的所有与Text-to-SQL相关&#xff08;通过搜索标题关键词查找得到&#xff0c;可能不全&#xff09;的论文&#xff0c;共计12篇&#xff0c;包含5篇正会论文和7篇Findings论文&#xff0c;以下是对这些论文的略…

Leetcode2786. 访问数组中的位置使分数最大

Every day a Leetcode 题目来源&#xff1a;2786. 访问数组中的位置使分数最大 解法1&#xff1a;动态规划 状态数组&#xff1a; dp[i][0]: 访问下标范围 [0, i] 中的元素且最后访问的元素是偶数时的最大得分&#xff1b;dp[i][1]: 访问下标范围 [0, i] 中的元素且最后访问…