图论练习1
内容:,拆点,分层,
传递,带限制的最小生成树
[HNOI2015]菜肴制作
题目链接
题目大意
- 有
个限制,
号菜肴在
号前完成
- 在满足限制的条件下,按照
出菜(
是为了满足
的限制 )
解题思路
- 由限制,可以考虑
- 若直接正向
,以
为例, 则会先出
- 而反向
,
- 此时对于一路限制,最先出的最小的号
- 题目有要求先满足较小号的限制
- 所以将队列改为由大到小排序的堆,再倒序输出每次出堆的号
- 排序的内容实际为正向限制路径上的最终菜肴
- 有环则无解
import java.io.*;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;public class Main{static int cnt=0;static Edge[] e;static int[] head;staticclass Edge{long val;int to;int fr;int nxt;}static void addEdge(int fr,int to,long val) {cnt++;e[cnt]=new Edge();e[cnt].fr=fr;e[cnt].to=to;e[cnt].val=val;e[cnt].nxt=head[fr];head[fr]=cnt;}staticclass Node{int x;long dis;public Node() {}public Node(int I,long D) {x=I;;dis=D;}}public static void main(String[] args) throws IOException{AReader input=new AReader();PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));int T=input.nextInt();while(true) {if(T==0) break;int n=input.nextInt();int m=input.nextInt();e=new Edge[m+1];head=new int[n+1];cnt=0;int[] in=new int[n+1];for(int i=1;i<=m;++i) {int u=input.nextInt();int v=input.nextInt();in[u]++;addEdge(v, u, 0);}PriorityQueue<Integer> qu=new PriorityQueue<Integer>((o1,o2)-> {return o2-o1;});boolean[] vis=new boolean[n+1];for(int i=1;i<=n;++i) {if(in[i]==0) {qu.add(i);vis[i]=true;}}int[] op=new int[n+1];int cnt=0;while(!qu.isEmpty()) {int x=qu.peek();qu.poll();cnt++;op[cnt]=x;for(int i=head[x];i>0;i=e[i].nxt) {int v=e[i].to;if(vis[v])continue;in[v]--;if(in[v]==0) {qu.add(v);vis[v]=true;}}}if(cnt!=n) {out.println("Impossible!");}else {for(int i=cnt;i>0;--i) {out.print(op[i]+" ");}out.println();}T--;}out.flush();out.close();}staticclass AReader {private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));private StringTokenizer tokenizer = new StringTokenizer("");private String innerNextLine() {try {return reader.readLine();} catch (IOException ex) {return null;}}public boolean hasNext() {while (!tokenizer.hasMoreTokens()) {String nextLine = innerNextLine();if (nextLine == null) {return false;}tokenizer = new StringTokenizer(nextLine);}return true;}public String nextLine() {tokenizer = new StringTokenizer("");return innerNextLine();}public String next() {hasNext();return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}}
}
胖胖的牛牛
题目链接
题目大意
- 在图上从
到
,
不可经过,有水平和垂直两个方向
- 在
且方向为垂直,往左或右走,需要转变方向
- 求
最少的转变方向次数
解题思路
- 将
,看作两步,先判断转向,再移动
- 所以将一个点拆为上下左右4个,
,
,
- 求拆点后,
的最短路
import java.io.*;
import java.io.ObjectInputStream.GetField;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;
import java.util.Vector;public class Main{static int inf=Integer.MAX_VALUE/2;staticclass Edge{int fr,to,nxt;int val;public Edge(int u,int v,int w) {fr=u;to=v;val=w;}}staticclass Node{int x,y;public Node(int X,int Y) {x=X;y=Y;}}static class Map{int[] head;int cnt;Edge[] e;int ans=inf;public Map(int n,int m) {e=new Edge[m];head=new int[n+1];cnt=0;}void addEdge(int fr,int to,int val) {cnt++;e[cnt]=new Edge(fr, to, val);e[cnt].nxt=head[fr];head[fr]=cnt;}void Dij(int s,int n,int[] t) {int[] dis=new int[n+1];boolean[] vis=new boolean[n+1];PriorityQueue<Node> q=new PriorityQueue<Node>((o1,o2)->{return o1.y-o2.y;});for(int i=1;i<=n;++i)dis[i]=inf;dis[s]=0;q.add(new Node(s, 0));while(!q.isEmpty()) {Node now=q.peek();q.poll();int x=now.x;if(vis[x])continue;int disu=now.y;for(int i=head[x];i>0;i=e[i].nxt) {int v=e[i].to;int w=e[i].val;if(vis[v])continue;if(dis[v]>disu+w) {dis[v]=disu+w;q.add(new Node(v,dis[v]));}}}ans=Math.min(ans, Math.min(dis[t[0]], dis[t[1]]));}}public static void main(String[] args) throws IOException{AReader input=new AReader();PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));int n=input.nextInt();char[][] map=new char[n+1][n+1];for(int i=1;i<=n;++i) {for(int j=1;j<=n;++j)map[i][j]=input.nextChar();}int N=4*n*n;Map T=new Map(N, 200000);int[] s=new int[2];int[] t=new int[2];for(int i=1;i<=n;++i) {for(int j=1;j<=n;++j) {if(map[i][j]=='x')continue;int num=(i-1)*n+j;int l=(num-1)*4;int u=l+1;int r=l+2;int v=l+3;T.addEdge(l, u, 1);T.addEdge(u, l, 1);T.addEdge(u, r, 1);T.addEdge(r, u, 1);T.addEdge(r, v, 1);T.addEdge(v, r, 1);T.addEdge(v, l, 1);T.addEdge(l, v, 1);T.addEdge(l, r, 0);T.addEdge(r, l, 0);T.addEdge(u, v, 0);T.addEdge(v, u, 0);if(j+1<=n&&map[i][j+1]!='x') {int nxtl=num*4;T.addEdge(r, nxtl, 0);T.addEdge(nxtl, r, 0);}if(j>=2&&map[i][j-1]!='x') {int nxtr=(num-2)*4+2;T.addEdge(nxtr, l, 0);T.addEdge(l, nxtr, 0);}if(i>=2&&map[i-1][j]!='x') {int nxtv=((i-2)*n+j-1)*4+3;T.addEdge(u, nxtv, 0);T.addEdge(nxtv, u, 0);}if(i+1<=n&&map[i+1][j]!='x') {int nxtu=(i*n+j-1)*4+1;T.addEdge(nxtu, v, 0);T.addEdge(v, nxtu, 0); } if(map[i][j]=='A') {s[0]=l;s[1]=u;}else if(map[i][j]=='B') {t[0]=l;t[1]=u;}}}T.Dij(s[0], N, t);T.Dij(s[1], N, t);if(T.ans==inf)out.print("-1");else out.print(T.ans);out.flush();out.close();}staticclass AReader{BufferedReader bf;StringTokenizer st;BufferedWriter bw;public AReader(){bf=new BufferedReader(new InputStreamReader(System.in));st=new StringTokenizer("");bw=new BufferedWriter(new OutputStreamWriter(System.out));}public String nextLine() throws IOException{return bf.readLine();}public String next() throws IOException{while(!st.hasMoreTokens()){st=new StringTokenizer(bf.readLine());}return st.nextToken();}public char nextChar() throws IOException{//确定下一个token只有一个字符的时候再用return next().charAt(0);}public int nextInt() throws IOException{return Integer.parseInt(next());}public long nextLong() throws IOException{return Long.parseLong(next());}public double nextDouble() throws IOException{return Double.parseDouble(next());}public float nextFloat() throws IOException{return Float.parseFloat(next());}public byte nextByte() throws IOException{return Byte.parseByte(next());}public short nextShort() throws IOException{return Short.parseShort(next());}public BigInteger nextBigInteger() throws IOException{return new BigInteger(next());}public void println() throws IOException {bw.newLine();}public void println(int[] arr) throws IOException{for (int value : arr) {bw.write(value + " ");}println();}public void println(int l, int r, int[] arr) throws IOException{for (int i = l; i <= r; i ++) {bw.write(arr[i] + " ");}println();}public void println(int a) throws IOException{bw.write(String.valueOf(a));bw.newLine();}public void print(int a) throws IOException{bw.write(String.valueOf(a));}public void println(String a) throws IOException{bw.write(a);bw.newLine();}public void print(String a) throws IOException{bw.write(a);}public void println(long a) throws IOException{bw.write(String.valueOf(a));bw.newLine();}public void print(long a) throws IOException{bw.write(String.valueOf(a));}public void println(double a) throws IOException{bw.write(String.valueOf(a));bw.newLine();}public void print(double a) throws IOException{bw.write(String.valueOf(a));}public void print(char a) throws IOException{bw.write(String.valueOf(a));}public void println(char a) throws IOException{bw.write(String.valueOf(a));bw.newLine();}}
}
UVALive7250 Meeting
题目大意
个点,
个集合,集合内的点有权为
的边
从
出发,
从
出发,走单位距离花费
时间,问
相遇与一点的最少时间
解题思路
- 若点集合
,任意两点之间连
边,共连
,当
很大存不下
- 考虑将集合看作一点
,则集合内两点
连边,变为
- 连边降为
,可以存下
在
个点上的任意一点相遇
- 以
和
为出发点,跑最短路
- 再枚举点,求
[USACO 2007 Mar G] Ranking the cows
题目链接
题目大意
- 有
个数字,已经比较了
对
- 问至少还需要多少对比较,可以将
个数由大到小排列
解题思路
- 对于
,若已知
,则
,类似
枚举中间点
- 定义
表示
- 可以省去枚举
,
表示与其他点的状态,用
- 若
,则不知道
大小关系,需要比较,
- 此时不知道比较后的结果,无法传递,要满足至少都得比较
import java.io.*;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.BitSet;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;
import java.util.Vector;public class Main{public static void main(String[] args) throws IOException{AReader input=new AReader();PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));int n=input.nextInt();int m=input.nextInt();BitSet[] a=new BitSet[n+1];for(int i=0;i<n;++i)a[i]=new BitSet(n);for(int i=1;i<=m;++i) {int x=input.nextInt()-1;int y=input.nextInt()-1;a[x].set(y);//对应位置赋为true}for(int k=0;k<n;++k) {for(int i=0;i<n;++i) {if(a[i].get(k)) {a[i].or(a[k]);//或运算}}}int ans=0;for(int i=0;i<n;++i) {for(int j=i+1;j<n;++j) {if(a[i].get(j)==false&&a[j].get(i)==false) {ans++;//因为不知道是i>j还是i<j,无法传递}}}out.print(ans);out.flush();out.close();}staticclass AReader{BufferedReader bf;StringTokenizer st;BufferedWriter bw;public AReader(){bf=new BufferedReader(new InputStreamReader(System.in));st=new StringTokenizer("");bw=new BufferedWriter(new OutputStreamWriter(System.out));}public String nextLine() throws IOException{return bf.readLine();}public String next() throws IOException{while(!st.hasMoreTokens()){st=new StringTokenizer(bf.readLine());}return st.nextToken();}public char nextChar() throws IOException{//确定下一个token只有一个字符的时候再用return next().charAt(0);}public int nextInt() throws IOException{return Integer.parseInt(next());}public long nextLong() throws IOException{return Long.parseLong(next());}public double nextDouble() throws IOException{return Double.parseDouble(next());}public float nextFloat() throws IOException{return Float.parseFloat(next());}public byte nextByte() throws IOException{return Byte.parseByte(next());}public short nextShort() throws IOException{return Short.parseShort(next());}public BigInteger nextBigInteger() throws IOException{return new BigInteger(next());}public void println() throws IOException {bw.newLine();}public void println(int[] arr) throws IOException{for (int value : arr) {bw.write(value + " ");}println();}public void println(int l, int r, int[] arr) throws IOException{for (int i = l; i <= r; i ++) {bw.write(arr[i] + " ");}println();}public void println(int a) throws IOException{bw.write(String.valueOf(a));bw.newLine();}public void print(int a) throws IOException{bw.write(String.valueOf(a));}public void println(String a) throws IOException{bw.write(a);bw.newLine();}public void print(String a) throws IOException{bw.write(a);}public void println(long a) throws IOException{bw.write(String.valueOf(a));bw.newLine();}public void print(long a) throws IOException{bw.write(String.valueOf(a));}public void println(double a) throws IOException{bw.write(String.valueOf(a));bw.newLine();}public void print(double a) throws IOException{bw.write(String.valueOf(a));}public void print(char a) throws IOException{bw.write(String.valueOf(a));}public void println(char a) throws IOException{bw.write(String.valueOf(a));bw.newLine();}}
}
[SCOI2012]滑雪与时间胶囊
题目链接
题目大意
条边,每个边的端点为景点,共
个
- 每个点有高度
能到
,满足有
,边权为
- 从从
号景点出发,走最短路,访问尽量多的节点
- 同时可以回到经过的任意一个节点,再次出发
- 问最多能访问多少个节点和此时走过的最小路径长度
解题思路
- 由于可以任意回溯,所以可以访问到
号节点能到的任意一个节点
- 设
号节点能到的点数为
,则最终边有
条
- 考虑
生成最小树
- 由于边有高度通行限制,所以要访问尽可能多的点,高度高的点先出,其次再比较边权
- 每出一个点,进行答案更新
import java.io.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.PriorityQueue;
import java.util.StringTokenizer;public class Main{static int cnt=0;static Edge[] e;static int[] head;staticclass Edge{long val;int to;int fr;int nxt;}static void addEdge(int fr,int to,long val) {cnt++;e[cnt]=new Edge();e[cnt].fr=fr;e[cnt].to=to;e[cnt].val=val;e[cnt].nxt=head[fr];head[fr]=cnt;}staticclass Node{int x;int h;long dis;public Node(){}public Node(int X,long D,int H){x=X;h=H;dis=D;}}public static void main(String[] args) throws IOException{AReader input=new AReader();PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));int n=input.nextInt();int m=input.nextInt();int[] H=new int[n+1];e=new Edge[m<<1|1];head=new int[n+1];for(int i=1;i<=n;++i) {H[i]=input.nextInt();}for(int i=1;i<=m;++i) {int u=input.nextInt();int v=input.nextInt();long val=input.nextLong();if(H[u]>=H[v])addEdge(u, v, val);if(H[v]>=H[u])addEdge(v, u, val);}boolean[] vis=new boolean[n+1];PriorityQueue<Node> qu=new PriorityQueue<Node>((o1,o2)->{if(o1.h==o2.h){if(o1.dis-o2.dis>0)return 1;else if(o1.dis-o2.dis<0)return -1;else return 0;}else return o2.h-o1.h;});int num=0;long ans=0;qu.add(new Node(1,0,H[1]));while(!qu.isEmpty()) {Node now=qu.peek();qu.poll();int x=now.x;if(vis[x])continue;vis[x]=true;ans+=now.dis;num++;for(int i=head[x];i>0;i=e[i].nxt) {int v=e[i].to;long w=e[i].val;if(vis[v])continue;qu.add(new Node(v,w,H[v]));}}out.println(num+" "+ans);out.flush();out.close();}staticclass AReader {private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));private StringTokenizer tokenizer = new StringTokenizer("");private String innerNextLine() {try {return reader.readLine();} catch (IOException ex) {return null;}}public boolean hasNext() {while (!tokenizer.hasMoreTokens()) {String nextLine = innerNextLine();if (nextLine == null) {return false;}tokenizer = new StringTokenizer(nextLine);}return true;}public String nextLine() {tokenizer = new StringTokenizer("");return innerNextLine();}public String next() {hasNext();return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}public double nextDouble() {return Double.parseDouble(next());}}
}
相关文章:
图论练习1
内容:,拆点,分层,传递,带限制的最小生成树 [HNOI2015]菜肴制作 题目链接 题目大意 有个限制,号菜肴在号前完成在满足限制的条件下,按照出菜( 是为了满足的限制 ) 解题思路 由限制…...

canvas设置图形各种混合模式,类似photoshop效果
查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…...
谷粒商城-P19
项目结构创建&提交到码云 数据库初始化 保持docker数据库一直打开 docker update redis --restartalways 连不上了,发现配置文件错了 换了一个配置文件。 快速开发 使用开源的脚手架 人人开源 (gitee.com) 使用renren-fast作为后台开发,使用…...
Vue3入门到实战笔记02
9. watch 作用:监视数据的变化(和Vue2中的watch作用一致)特点:Vue3中的watch只能监视以下四种数据: ref定义的数据。reactive定义的数据。函数返回一个值(getter函数)。一个包含上述内容的数组…...
CDN高防IP:技术解析与相关问题解答
在使用CDN高防IP技术的过程中,可能会遇到一些问题。下面是一些常见问题和相应的解答,希望能帮助读者更好地了解和使用CDN高防IP技术。 问题一:什么是CDN高防IP技术? 解答:CDN高防IP技术是一种通过将网站流量分散到多…...

【React】react组件传参
【React】react组件传参 一、props:父组件向子组件传参1、将普通的参数作为props传递2、将jsx作为props传递(组件插槽)(1)基础功能示例(2)进阶示例 二、自定义事件:子父组件向父组件…...
Vue/html中点击复制到剪贴板
1.使用JQ实现复制功能 html <div class"tran_one tran_yi"><div class"form-group"><textarea>文本</textarea></div><div class"form-group tran_group"><div class"tran_flex tran_left tran_co…...

MtfLive直播导航PHP源码,附带系统搭建教程
将自动采集斗鱼、虎牙、触手、YY、章鱼、电视直播按分类/关键词聚合,用户选择分类,可以观看到全网该关键词下正在直播的内容。 特点 PC站和H5移动站自适应 自动缓存,避免频繁抓取数据 自定义抓取采集规则,同时支持HTML和JSON …...
day19 初始HTML
什么是HTML HTML(Hyper Text Markup Language)超文本标记语言 超文本包括:文字、图片、音频、视频、动画等 HTML5,提供了一些新的元素和一些有趣的新特性,同时也建立了一些新的规则。这些元素、特性和规则的建立&…...
从编程中理解:退一步海阔天空
编程中,“退一步海阔天空”的理念指的是在面对问题时,有时过于纠结于细节或局部优化,反而会陷入困境。这时,如果能暂时放下手中的具体工作,从更高的层面或者换个角度来审视整个系统的设计和架构,可能会发现…...

【前沿技术杂谈:开源软件】引领技术创新与商业模式的革命
【前沿技术杂谈:开源软件】引领技术创新与商业模式的革命 开源软件如何推动技术创新开源软件的开放性和协作精神促进知识共享和技术迭代推动关键技术的发展开源软件与新技术的融合 开源软件的商业模式开源软件的商业模式将开源软件与商业软件相结合 开源软件的安全风…...
c# datatable 通过反射转成泛型list
在C#中,可以使用反射来将DataTable转换为泛型列表。下面是一个示例代码,展示了如何使用反射来实现这个转换过程: using System; using System.Collections.Generic; using System.Data;public class DataConverter {public List<T> Co…...

如何保证MySQL数据一致性
在当今大数据时代,数据库系统扮演着至关重要的角色,而MySQL作为一种流行的关系型数据库管理系统,在数据一致性方面拥有着丰富的机制和技术。下面简单的探讨MySQL是如何保证数据一致性的。 事务与ACID特性 要了解MySQL如何保证数据一致性&am…...

Android学习之路(27) ProGuard,混淆,R8优化
前言 使用java编写的源代码编译后生成了对于的class文件,但是class文件是一个非常标准的文件,市面上很多软件都可以对class文件进行反编译,为了我们app的安全性,就需要使用到Android代码混淆这一功能。 针对 Java 的混淆&#x…...

进程中线程使用率偏高问题排查
1. top命令查看CPU使用率高的进程 2. top -H -p 15931(进程PID) 查看进程下的线程 3. printf "%x\n" 17503(线程PID) 线程PID 10进制转16进制 0x445f 4. jstack -l 15931(JVM进程PID) 导出java进程栈信息,里面包含线程nid0x445f和所在的类࿰…...

【JavaEE进阶】 图书管理系统开发日记——肆
文章目录 🍃前言🎍约定前后端交互接⼝🍀服务器代码实现🚩控制层🚩业务层🚩数据层 🌴前端代码的修改⭕总结 🍃前言 今天我们来实现修改图书模块 首先我们先来看一下,需要…...

STM32--USART串口(1)串口协议
一、通信接口 全双工:通信双方能够同时进行双向通信; 半双工:通信双方能够进行双向通信,但不能同时通信; 单工:只能从一个设备到另一个设备; 同步:接收方可以在时钟信号的指引下进…...

单臂路由实验(华为)
思科设备参考: 单臂路由实验(思科) 一,实验目的 在路由器的一个接口上通过配置子接口的方式,实现相互隔离的不同vlan之间互通。 二,设备配置 Switch1 <Huawei>sys [Huawei]vlan batch 10 20…...

websocket编写聊天室
【黑马程序员】WebSocket打造在线聊天室【配套资料源码】 总时长 02:45:00 共6P 此文章包含第1p-第p6的内容 简介 温馨提示:现在都是第三方支持聊天,如极光,学这个用于自己项目完全没问题,大项目不建议使用 需求分析 代码...

【论文解读】Collaboration Helps Camera Overtake LiDAR in 3D Detection
CoCa3D 摘要引言Collaborative Camera-Only 3D DetectionCollaborative depth estimationCollaborative detection feature learning 实验结论和局限 摘要 与基于 LiDAR 的检测系统相比,仅相机 3D 检测提供了一种经济的解决方案,具有简单的配置来定位 3…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...