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

图论(洛谷刷题)

目录

前言:

题单:

P3386 【模板】二分图最大匹配

P1525 [NOIP2010 提高组] 关押罪犯

P3385 【模板】负环

P3371 【模板】单源最短路径(弱化版) 

SPFA写法

Dij写法:

 P3385 【模板】负环

P5960 【模板】差分约束 

 P7771 【模板】欧拉路径

文末: 


前言:

若刚入门图论,想做基础图论题,请移步:CSDN

题单:

P3386 【模板】二分图最大匹配

https://www.luogu.com.cn/problem/P3386

交替路:

从未匹配点出发,依次经过非匹配边,匹配边,非匹配边……形成的路径


增广路:

从非匹配点出发,走交替路,最后到达另一非匹配点的路径


算法:
可以发现增广路的匹配边比交替路的匹配边多一----->可以尽可能找增广路(用DFS或者BFS实现),当找不到增广路时,就得到了最大匹配边


匈牙利算法:

男女相亲,男选女,可占可让(可以有女朋友,当遍历到的男生的心仪女生有男朋友时,如果该男朋友还有其他心仪女生没有对象,那么该男朋友会将女朋友让出来,并有新的女朋友)😦😦😦(真渣啊~(*  ̄︿ ̄)(超小声嘀咕(* ̄3 ̄)╭))

const int N = 505;
const int M = 5e4 + 5;int cnt;
int head[N];
int match[N];//i的男友
int vis[N];int n, m, e;
int ans;struct EDGE
{int v;int next;
}EDGE[/*2 * */M];void add(int u, int v)
{cnt++;EDGE[cnt].v = v;EDGE[cnt].next = head[u];//不是等于cnthead[u] = cnt;
}bool dfs(int f)//boyfriend
{for (int i = head[f]; i; i = EDGE[i].next)//遍历女友{int v = EDGE[i].v;if (vis[v])continue;vis[v] = 1;if (match[v] == 0 || dfs(match[v]/*传的是男友*/)){match[v] = f;return 1;}}return 0;
}int main()
{quickio;cin >> n >> m >> e;int u, v;while (e--){cin >> u >> v;add(u, v);//add(v, u);//不要建双边,只要遍历男友就可以了}for (int i = 1; i <= n; i++)//遍历男友{memset(vis, 0, sizeof(vis));if (dfs(i))ans++;}cout << ans << endl;return 0;
}

P1525 [NOIP2010 提高组] 关押罪犯

https://www.luogu.com.cn/problem/P1525

思路:

要用到贪心

按边从大到小排序,再按顺序往后安排各自的监狱,首先最大的怨气的两个人肯定要放在不同的监狱(就是不同的集合---->要涉及到并查集,放相同监狱的有相同的祖先)🧐🧐🧐


#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <functional>
#include <climits>#define quickio ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl "\n"using namespace std;
typedef long long ll;const int N = 2e4 + 5;
const int M = 1e5 + 5;int n, m;
int fa[N * 2];//> n的存的是敌人struct zf
{int a;int b;int c;
}zf[M];bool cmp(struct zf a, struct zf b)
{return a.c > b.c;
}int find(int x)
{if (fa[x] == x)return x;return fa[x] = find(fa[x]);
}int FindMin()
{for (int i = 0; i < m; i++){int x = find(zf[i].a);int y = find(zf[i].b);if (x == y)return zf[i].c;fa[fa[zf[i].a]]/*注意是fa[fa[]],要把祖先直接归并到敌人集合,而不只是自己*/ = find(zf[i].b + n)/*不是fa[zf[i].b + n],因为要找的是最上面的祖先*/;fa[fa[zf[i].b]] = find(zf[i].a + n);}return 0;
}int main()
{cin >> n >> m;//并查集基本操作:初始化父亲for (int i = 1; i <= 2 * n; i++)fa[i] = i;for (int i = 0; i < m; i++){cin >> zf[i].a >> zf[i].b >> zf[i].c;}sort(zf, zf + m, cmp);int ans = 0;ans = FindMin();cout << ans << endl;return 0;
}

P3385 【模板】负环

https://www.luogu.com.cn/problem/P3385

注意:

该题不可以用Dijkstra,只能用SPFA,但是通常求最短路最好用Dijkstra,因为SPFA经常被卡,例如你可以做这两个题目:😏  ......~( ̄▽ ̄)~*

【模板】单源最短路径(弱化版) - 洛谷

【模板】单源最短路径(标准版) - 洛谷

你会发现SPFA的代码可以过弱化版,但是过标准版会有一堆TLE(我会在后面公布这两题的答案ฅʕ•̫͡•ʔฅ)

P3371 【模板】单源最短路径(弱化版) 

【模板】单源最短路径(弱化版) - 洛谷

SPFA写法
//SPFA
//该代码是可以判断负环的SPFA,且采用vector存边#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <functional>
#include <climits>#define quickio ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl "\n"using namespace std;
typedef long long ll;const int N = 5e5 + 5;struct edge
{int v;int w;
};
int vis[N];//标记是否在队内,所有pop后要置为0,和Dij不一样!!!!!!!!,Dij是标记该点访问过,不再访问
int ans[N];
int countt[N];//经过每个点的次数,如果有一个点的次数 >= n,则有负环vector<edge>e[N];int n, m, s;bool SPFA(int s)
{queue<int>que;//memset(ans, 0x3f, sizeof(ans));该题初始化为这个不够,0x3f3f3f3f < INT_MAX,要初始化为INT_MAX//注意题目要求啊!!!!!!!若不能到达则输出 2^31 - 1,for (int i = 1; i <= n; i++)ans[i] = INT_MAX;ans[s] = 0;que.push(s);vis[s] = 1;while (!que.empty()){int dian = que.front();que.pop();vis[dian] = 0;/*出队是0,注意!!!!!!!!!!,vis是表示是否在队内的*/for (auto ed : e[dian]){int v = ed.v;int w = ed.w;if (ans[v] > ans[dian] + w){ans[v] = ans[dian] + w;countt[v] = countt[dian] + 1;if (countt[v] >= n)return true;//返回true表示有负环if (vis[v] == 0){vis[v] = 1;que.push(v);}}}}return false;
}int main()
{cin >> n >> m >> s;int u, v, w;for (int i = 0; i < m; i++){cin >> u >> v >> w;e[u].push_back({ v, w });}SPFA(s);for (int i = 1; i <= n; i++)cout << ans[i] << " ";return 0;
}
Dij写法:

问题:

弱化版的代码超时---->要用堆优化   (ง •_•)ง

核心:

priority_queue< pair<int,int> > 用优先队列来取最近的点,就不用遍历找点了

在priority_queue中,是按pair的第一个元素(first)由大到小排序的,所以pair<距离,点号>,注意因为要的是最小值,所以距离要存负值 (重点敲黑板哦~~    😳😳😳)


总结:

要优先队列来方便选出最短路径,注意堆优化(优先队列)中的排序是从大到小,所以存距离要存负数
要一个结构体存每个点的数据,head数组存每条链的数据,还要用ans数组记录从起点到某点的最短距离,用vis数组记录点是否被加入过最短路径,避免重复加入


#include <queue>
/*堆优化:利用优先队列,降低复杂度,直接排序,注意优先队列是由大到小排列的,因此距离是负数 */
#include <climits>
#include <iostream>using namespace std;const int MAX = 1e6;
int n, m, s;
int ans[MAX];//最短距离
int cnt;
int head[MAX];//出边的头标记
int visit[MAX];//标记该点是否被访问过struct EDGE
{int to;int next;//下一个出边int wei;//权值
}edge[MAX];void add(int u, int v, int w)
{cnt++;edge[cnt].wei = w;edge[cnt].to = v;edge[cnt].next = head[u];head[u] = cnt;
}int main()
{int i;int u, v, w;cin >> n >> m >> s;for (i = 1; i <= n; i++)ans[i] = INT_MAX;ans[s] = 0;for (i = 1; i <= m; i++){cin >> u >> v >> w;add(u, v, w);}priority_queue<pair<int, int> >que;//距离,点que.push({0, s});while (!que.empty()){int qh = que.top().first;int h = que.top().second;que.pop();/*记得pop()!!!!!!!!!*/if (visit[h] == 0){visit[h] = 1;for (i = head[h]; i != 0; i = edge[i].next)//不断找下一个儿子,直到找完{if (ans[edge[i].to] > ans[h] + edge[i].wei){ans[edge[i].to] = ans[h] + edge[i].wei;if (visit[edge[i].to] == 0)que.push({ -ans[edge[i].to], edge[i].to });}}}}for (i = 1; i <= n; i++)cout << ans[i] << ' ';cout << endl;return 0;
}

 P3385 【模板】负环

P3385 【模板】负环 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

//负环
//该代码是可以判断负环的SPFA,且采用vector存边const int N = 5e5 + 5;struct edge
{int v;int w;
};
int vis[N];//标记是否在队内,所有pop后要置为0,和Dij不一样!!!!!!!!,Dij是标记该点访问过,不再访问
int ans[N];
int countt[N];//经过每个点的次数,如果有一个点的次数 >= n,则有负环vector<edge>e[N];int n, m, s;bool SPFA(int s)
{queue<int>que;for (int i = 1; i <= n; i++)ans[i] = INT_MAX;memset(vis, 0, sizeof(vis));memset(countt, 0, sizeof(countt));ans[s] = 0;que.push(s);vis[s] = 1;while (!que.empty()){int dian = que.front();que.pop();vis[dian] = 0;/*出队是0,注意!!!!!!!!!!,vis是表示是否在队内的*/for (auto ed : e[dian]){int v = ed.v;int w = ed.w;if (ans[v] > ans[dian] + w){ans[v] = ans[dian] + w;countt[v] = countt[dian] + 1;if (countt[v] >= n)return true;//返回true表示有负环if (vis[v] == 0){vis[v] = 1;que.push(v);}}}}return false;
}int main()
{int t;cin >> t;while (t--){memset(e, 0, sizeof(e));cin >> n >> m;int u, v, w;for (int i = 0; i < m; i++){cin >> u >> v >> w;if (w >= 0){e[u].push_back({ v, w });e[v].push_back({ u, w });}elsee[u].push_back({ v, w });}if (SPFA(1)){cout << "YES" << endl;}elsecout << "NO" << endl;}return 0;
}

P5960 【模板】差分约束 

【模板】差分约束 - 洛谷

一个差分约束系统是这样的:

给出 n 个变量和 m 个约束条件,形如    Xi - Xj≤Ck  ​,你需要求出一组解,使得所有约束条件均被满足。🤯🤯🤯

怎样解这个差分约束系统呢?我们将上面的不等式变形一下:

Xi​≤Xj​+Ck​          🤔(+_+)?

容易发现这个形式和最短路中的三角形不等式Dis(v)​≤Dis(u)​+w 非常相似。😮😮😮

因此我们就将这个问题转化为一个求最短路的问题:比如对于上面这个不等式,

1、我们从 j 向 i 连一条权值为 Ck​ 的边。

2、我们再新建一个 0 号点,从 0 号点向其他所有点连一条权值为 0的边。

这个操作相当于新增了一个变量 X0​ 和 n 个约束条件xi​≤x0​,从而将所有变量都和X0​ 这一个变量联系起来。

3、然后以 0号点为起点,用 SPFA 跑最短路。

如果有负权环,差分约束系统无解。否则设从 0号点到 i号点的最短路为 Dis(i)​,则xi​=Dis(i)​ 即为差分约束系统的一组可行解。

const int N = 5e5 + 5;struct edge
{int v;int w;
};
int vis[N];//标记是否在队内,所有pop后要置为0,和Dij不一样!!!!!!!!,Dij是标记该点访问过,不再访问
int ans[N];
int countt[N];//经过每个点的次数,如果有一个点的次数 >= n,则有负环vector<edge>e[N];int n, m, s;bool SPFA(int s)
{queue<int>que;for (int i = 1; i <= n; i++)ans[i] = INT_MAX;memset(vis, 0, sizeof(vis));memset(countt, 0, sizeof(countt));ans[s] = 0;que.push(s);vis[s] = 1;while (!que.empty()){int dian = que.front();que.pop();vis[dian] = 0;/*出队是0,注意!!!!!!!!!!,vis是表示是否在队内的*/for (auto ed : e[dian]){int v = ed.v;int w = ed.w;if (ans[v] > ans[dian] + w){ans[v] = ans[dian] + w;countt[v] = countt[dian] + 1;if (countt[v] >= n + 1/*注意这里是n + 1了,因为多加了一个0号节点*/)return true;//返回true表示有负环if (vis[v] == 0){vis[v] = 1;que.push(v);}}}}return false;
}int main()
{memset(e, 0, sizeof(e));cin >> n >> m;int u, v, w;for (int i = 0; i < m; i++){cin >> u >> v >> w;//e[u].push_back({ v, w });e[v].push_back({ u, w });//注意这里的起点和终点!!!!!!!}for (int i = 1; i <= n; i++)e[0].push_back({ i, 0 });//注意:要让一点可以到达所有点才行,但是图内不一定存在这种点,所以可以自己创建一个0节点,并和所有点都连起来,同时边权为0if (SPFA(0) == false)//从0号节点出发,求它到所有点的最短路径,如果有负环,该差分约束无解{for (int i = 1; i <= n; i++)cout << ans[i] << " ";cout << endl;}elsecout << "NO" << endl;return 0;
}

 P7771 【模板】欧拉路径

https://www.luogu.com.cn/problem/P7771

欧拉路径:

只经过一次的边😮


欧拉回路:

经过欧拉路径能回到起点的回路 🤨🤨🤨


欧拉图:

有欧拉 回路 的图😶


半欧拉图:

有欧拉 路径 的图,但是没有欧拉 回路 😵😵😵

判断是否有欧拉路径:
1、有向图
欧拉路径:
只有两个点出度不等于入度:起点(出度 = 入度 + 1),终点(入度 = 出度 + 1)
其他点:入度 = 出度 (~﹃~)~zZ
欧拉回路:
所有点入度等于出度 O_O

2、无向图
欧拉路径:
只有两个点的度数为奇数:起点(出度 = 入度 + 1),终点(入度 = 出度 + 1)
其他点:度数为偶数           (っ´Ι`)っ:偶数
欧拉回路:
所有点度数为偶数    ( ´・・)ノ(._.`)

const int N = 1e5 + 5;
const int M = 2e5 + 5;//用Dij不好排序,用vector的图
//struct EDGE
//{
//	int v;
//	int w;
//	int next;
//}EDGE[M];
//
//int head[N];
//int ans[N];
//int vis[N];
//int cnt;
//
//int du[N][2];//入度,出度
//
//void add(int u, int v, int w)
//{
//	cnt++;
//	EDGE[cnt].v = v;
//	EDGE[cnt].w = w;
//	EDGE[cnt].next = head[u];
//	head[u] = cnt;
//}vector<int>G[N];
stack<int>st;
int du[N][2];//入度,出度
int cnt[2];//记录多少点出度不等于入度,cnt[0]:入度 > 出度,cnt[1]:出度 > 入度
int beginn[N];//记录每个点遍历到了哪个出边void DFS(int qi)
{for (int i = beginn[qi]; i < G[qi].size(); i = beginn[qi]/*注意不是i++,因为经过DFS后,beginn[qi]的值可能早已改变,不能再从目前点的后一个点继续走*/){beginn[qi] = i + 1;DFS(G[qi][i]);}st.push(qi);//最后放:因为栈是先进后出,要先把该点的出边都遍历完再放入该点,以便输出时该点先输出
}int main()
{int n, m;cin >> n >> m;int u, v;for (int i = 0; i < m; i++){cin >> u >> v;G[u].push_back(v);du[u][1]++;du[v][0]++;}int qi = 1;//起点//int flag = 0;//flag = 0表示:所有点入度 = 出度for (int i = 1; i <= n; i++){sort(G[i].begin(), G[i].end());//注意vector和数组对sort的用法不同if (du[i][0] != du[i][1]){//flag = 1;if (du[i][0] - du[i][1] == 1)//入度 - 出度 = 1:终点{cnt[1]++;}else if (du[i][1] - du[i][0] == 1)//出度 - 入度 = 1:起点{cnt[0]++;qi = i;}else{cout << "No" << endl;return 0;}}}if (cnt[0] != cnt[1]/*起点数不等于终点数*/){cout << "No" << endl;return 0;}if (cnt[0] != 0/*不是欧拉路径*/ && cnt[0] != 1/*不止一个起点*/){cout << "No" << endl;return 0;}DFS(qi);while (!st.empty()){cout << st.top() << " ";st.pop();}return 0;
}

文末: 

单源最短路径(弱化版)

【模板】单源最短路径(弱化版) - 洛谷

该题可用Dij,也可用SPFA,该题SPFA可以:

单源最短路径(标准版) 

【模板】单源最短路径(标准版) - 洛谷

该题只能Dij,若为SPFA:

综上所述:最好用Dij算法求单源最短路径,但若有负边权只能用SPFA 

相关文章:

图论(洛谷刷题)

目录 前言&#xff1a; 题单&#xff1a; P3386 【模板】二分图最大匹配 P1525 [NOIP2010 提高组] 关押罪犯 P3385 【模板】负环 P3371 【模板】单源最短路径&#xff08;弱化版&#xff09; SPFA写法 Dij写法&#xff1a; P3385 【模板】负环 P5960 【模板】差分约束…...

安卓部署ffmpeg全平台so并实现命令行调用

安卓 FFmpeg系列 第一章 Ubuntu生成ffmpeg安卓全平台so 第二章 Windows生成ffmpeg安卓全平台so 第三章 生成支持x264的ffmpeg安卓全平台so 第四章 部署ffmpeg安卓全平台so并使用&#xff08;本章&#xff09; 文章目录 安卓 FFmpeg系列前言一、添加so1、拷贝ffmpeg到项目2、bu…...

Go语言中MD5盐值加密解决用户密码问题

1. 用户密码存储的挑战 在Web应用开发中&#xff0c;用户密码的安全存储是一个核心问题。明文存储用户密码是极其危险的&#xff0c;因为一旦数据库被泄露&#xff0c;攻击者就可以直接获取用户的密码。为了保护用户密码&#xff0c;我们需要采取加密措施。 2. MD5算法简介 …...

flutter开发实战-本地SQLite数据存储

flutter开发实战-本地SQLite数据库存储 正在编写一个需要持久化且查询大量本地设备数据的 app&#xff0c;可考虑采用数据库。相比于其他本地持久化方案来说&#xff0c;数据库能够提供更为迅速的插入、更新、查询功能。这里需要用到sqflite package 来使用 SQLite 数据库 预…...

【路由組件】

完成Vue Router 安装后&#xff0c;就可以使用路由了&#xff0c;路由的基本使用步骤&#xff0c;首先定义路由组件&#xff0c;以便使用Vue Router控制路由组件展示与 切换&#xff0c;接着定义路由链接和路由视图&#xff0c;以便告知路由组件渲染到哪个位置&#xff0c;然后…...

【C++风云录】数字逻辑设计优化:电子设计自动化与集成电路

集成电路设计&#xff1a;打开知识的大门 前言 本文将详细介绍关于数字芯片设计&#xff0c;电子设计格式解析&#xff0c;集成电路设计工具&#xff0c;硬件描述语言分析&#xff0c;电路验证以及电路优化六个主题的深入研究与实践。每一部分都包含了主题的概述&#xff0c;…...

Flask Response 对象

文章目录 创建 Response 对象设置响应内容设置响应状态码设置响应头完整的示例拓展设置响应的 cookie重定向响应发送文件作为响应 总结 Flask 是一个 Python Web 框架&#xff0c;用于快速开发 Web 应用程序。在 Flask 中&#xff0c;我们使用 Response 对象来构建 HTTP 响应。…...

算法001:移动零

力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/move-zeroes/ 使用 双指针 来解题&#xff1a; 此处的双指针&#xff0c;…...

基于springboot+vue+Mysql的网上书城管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

python实现绘制烟花代码

在Python中&#xff0c;我们可以使用多个库来绘制烟花效果&#xff0c;例如turtle库用于简单的绘图&#xff0c;或者更复杂的库如pygame或matplotlib结合动画。但是&#xff0c;由于turtle库是Python自带的&#xff0c;我们可以使用它来绘制一个简单的烟花效果。 下面是一个使…...

Python小白的机器学习入门指南

Python小白的机器学习入门指南 大家好&#xff01;今天我们来聊一聊如何使用Python进行机器学习。本文将为大家介绍一些基本的Python命令&#xff0c;并结合一个简单的数据集进行实例讲解&#xff0c;希望能帮助你快速入门机器学习。 数据集介绍 我们将使用一个简单的鸢尾花数…...

学校上课,是耽误我学习了。。

>>上一篇&#xff08;文科生在三本院校&#xff0c;读计算机专业&#xff09; 2015年9月&#xff0c;我入学了。 我期待的大学生活是多姿多彩的&#xff0c;我会参加各种社团&#xff0c;参与各种有意思的活动。 但我是个社恐&#xff0c;有过尝试&#xff0c;但还是难…...

OpenFeign高级用法:缓存、QueryMap、MatrixVariable、CollectionFormat优雅地远程调用

码到三十五 &#xff1a; 个人主页 微服务架构中&#xff0c;服务之间的通信变得尤为关键。OpenFeign&#xff0c;一个声明式的Web服务客户端&#xff0c;使得REST API的调用变得更加简单和优雅。OpenFeign集成了Ribbon和Hystrix&#xff0c;具有负载均衡和容错的能力&#xff…...

python基础之函数

目录 1.函数相关术语 2.函数类型分类 3.栈 4.位置参数和关键字参数 5.默认参数 6.局部变量和全局变量 7.返回多个值 8.怀孕函数 9.匿名函数 10.可传递任意个数实参的函数 11.函数地址与函数接口 12.内置函数修改与函数包装 1.函数相关术语 函数的基本概念有函数头…...

深入理解C#中的IO操作 - FileStream流详解与示例

文章目录 一、FileStream类的介绍二、文件读取和写入2.1 文件读取&#xff08;FileStream.Read&#xff09;2.2 文件写入&#xff08;FileStream.Write&#xff09; 三、文件复制、移动和目录操作3.1 文件复制&#xff08;FileStream.Copy&#xff09;3.2 文件移动&#xff08;…...

信息泄露--注意点点

目录 明确目标: 信息泄露: 版本软件 敏感文件 配置错误 url基于文件: url基于路由: 状态码: http头信息泄露 报错信息泄露 页面信息泄露 robots.txt敏感信息泄露 .get文件泄露 --判断: 搜索引擎收录泄露 BP: 爆破: 明确目标: 失能 读取 写入 执行 信息泄…...

位运算符

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 位运算符是把数字看作二进制数来进行计算的&#xff0c;因此&#xff0c;需要先将要执行运算的数据转换为二进制&#xff0c;然后才能进行执行运算。…...

云上聚智——移动云云服务器进行后端的搭建及部署

什么是移动云 移动云是指将移动设备和云计算技术相结合&#xff0c;为移动应用提供强大的计算和存储能力的服务模式。传统的移动应用通常在本地设备上进行计算和存储&#xff0c;而移动云将这些任务转移到云端进行处理。通过移动云&#xff0c;移动设备可以利用云端的高性能计算…...

C语言程序的编译

目录 一、预处理&#xff08;预编译&#xff09; 二、编译 三、汇编 四&#xff0c;链接 在前面讲到了宏的定义&#xff0c;那么宏在编译时候是如何发生替换的&#xff1f;接下来做一下详细的介绍C语言程序的编译过程主要包括以下几个步骤&#xff1a;预处理、编译、汇编和…...

滴滴三面 | Go后端研发

狠狠的被鞭打了快两个小时… 注意我写的题解不一定是对的&#xff0c;如果你认为有其他答案欢迎评论区留言 bg&#xff1a;23届 211本 社招 1. 自我介绍 2. 讲一个项目的点&#xff0c;因为用到了中间件平台的数据同步&#xff0c;于是开始鞭打数据同步。。 3. 如果同步的时候…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...