图论练习1

内容:Tuopu,拆点,分层,Bitset传递,带限制的最小生成树


[HNOI2015]菜肴制作

题目链接

题目大意 

  • m个限制,x号菜肴在y号前完成
  • 在满足限制的条件下,按照1\cdots 2\cdots 3\cdots出菜( 1\cdots 2是为了满足2的限制 )

解题思路

  • 由限制,可以考虑Tuopu
  • 若直接正向Tuopu,以 3\rightarrow 4\rightarrow 1 \ | \ 2 \ | \ 5 为例, 则会先出2
  • 而反向Tuopu1\rightarrow 4\rightarrow 3 \ | \ 2 \ | \ 5
  • 此时对于一路限制,最先出的最小的号
  • 题目有要求先满足较小号的限制
  • 所以将队列改为由大到小排序的堆,再倒序输出每次出堆的号
  • 排序的内容实际为正向限制路径上的最终菜肴
  • 有环则无解

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());}}
}

胖胖的牛牛

题目链接

题目大意

  • 在图上从AB"x"不可经过,有水平和垂直两个方向
  • x且方向为垂直,往左或右走,需要转变方向
  • A\rightarrow B最少的转变方向次数

解题思路

  • x\rightarrow y,看作两步,先判断转向,再移动
  • 所以将一个点拆为上下左右4个,(u,v,l,r)
  • \left\{\begin{matrix} u\overset{0}\leftrightharpoons v\\ l\overset{0}\leftrightharpoons r\\ l\overset{1}\leftrightharpoons u\\ u\overset{1}\leftrightharpoons r\\ r\overset{1}\leftrightharpoons v\\ v\overset{1}\leftrightharpoons l \end{matrix}\right.\left\{\begin{matrix} nxtr\overset{0}\leftrightharpoons l \\ r\overset{0}\leftrightharpoons nxtl & \\ nxtv\overset{0}\leftrightharpoons u & \\ v\overset{0}\leftrightharpoons nxtu& \end{matrix}\right.\left\{\begin{matrix} num=(i-1)*n+j\\ l=num*4\\ u=l+1\\ r=l+2\\ v=l+3 \end{matrix}\right.
  • 求拆点后,A\rightarrow B的最短路

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

题目大意 

  • n个点,m个集合,集合内的点有权为f的边
  • A1出发,Bn出发,走单位距离花费1时间,问AB相遇与一点的最少时间

解题思路 

  • 若点集合size=k,任意两点之间连f边,共连\textrm{C}_{k}^{2},当k很大存不下
  • 考虑将集合看作一点t,则集合内两点x,y连边,变为 x\overset{f/2}\leftrightarrow t\overset{f/2}\leftrightarrow y,double \ f
  • 连边降为k*2,可以存下
  • A,B 在n个点上的任意一点相遇
  • 1n为出发点,跑最短路
  • 再枚举点,求Min^n_{i=1} \ max(dis_1[i],dis_n[i])

[USACO 2007 Mar G] Ranking the cows

题目链接

 题目大意

  • n 个数字,已经比较了m
  • 问至少还需要多少对比较,可以将n个数由大到小排列

解题思路 

  • 对于x,y,z,若已知x>y,y>z,则x>z
  • n\leq 1000,类似Floyd枚举中间点
  • 定义f[i][j]表示i>j,1=true,0=false
  • f[i][j]=f[i][k]\&f[k][j],(1\&1=1)
  • 可以省去枚举jif(f[i][k])f[i]|=f[k] 
  • f[i]表示与其他点的状态,用bitset
  • f[i][j]==0\&\&f[j][i]==0,则不知道i,j大小关系,需要比较,ans++
  • 此时不知道比较后的结果,无法传递,要满足至少都得比较

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]滑雪与时间胶囊

题目链接

题目大意 

  • m条边,每个边的端点为景点,共n
  •  每个点有高度H_i
  • i能到j,满足有i\rightarrow j\&\&H_i\geq H_j,边权为w
  • 从从1号景点出发,走最短路,访问尽量多的节点
  • 同时可以回到经过的任意一个节点,再次出发
  • 问最多能访问多少个节点和此时走过的最小路径长度

解题思路

  • 由于可以任意回溯,所以可以访问到1号节点能到的任意一个节点 
  • 1号节点能到的点数为k,则最终边有k-1
  • 考虑Prim生成最小树
  • 由于边有高度通行限制,所以要访问尽可能多的点,高度高的点先出,其次再比较边权
  • 每出一个点,进行答案更新
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());}}
}

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

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

相关文章

Redis-缓存问题及解决方案

本文已收录于专栏 《中间件合集》 目录 概念说明缓存问题缓存击穿问题描述解决方案 缓存穿透问题描述解决方案 缓存雪崩问题描述解决方案提高缓存可用性过期时间配置熔断降级 总结提升 概念说明 Redis是一个开源的内存数据库&#xff0c;也可以用作缓存系统。它支持多种数据结构…

解锁MyBatis Plus的强大功能:学习高级操作与DML技巧!

MyBatisPlus 1&#xff0c;DML编程控制1.1 id生成策略控制知识点1&#xff1a;TableId1.1.1 环境构建1.1.2 代码演示AUTO策略步骤1:设置生成策略为AUTO步骤3:运行新增方法 INPUT策略步骤1:设置生成策略为INPUT步骤2:添加数据手动设置ID步骤3:运行新增方法 ASSIGN_ID策略步骤1:设…

海量数据处理商用短链接生成器平台 - 2

第二章 短链平台项目创建git代码管理开发分层规范 第1集 短链平台实战-Maven聚合工程创建微服务项目 **简介&#xff1a;Maven聚合工程创建微服务项目实战 ** Maven聚合工程拆分 dcloud-common 公共依赖包 dcloud-app FlinkKafka实时计算 dcloud-account 账号流量包微服务 dc…

一分钟了解电脑关机快捷键是什么!

在日常使用电脑的过程中&#xff0c;了解一些基本的快捷键是提高效率的关键之一。其中&#xff0c;电脑关机快捷键是一个方便且迅速的操作&#xff0c;使您可以在不用通过烦琐的菜单操作的情况下&#xff0c;快速关机电脑。在本文中&#xff0c;我们将探讨电脑关机快捷键是什么…

C++初阶:适合新手的手撕string类(模拟实现string类)

上次讲了常用的接口&#xff1a;C初阶&#xff1a;初识STL、String类接口详细讲解&#xff08;万字解析&#xff09; 今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.构造函数&#xff08;constructor)2.1构造函数2.1.1无参有参分开2.1.2利用缺省参数合起来 2.2拷贝构…

Pyecharts炫酷散点图构建指南【第50篇—python:炫酷散点图】

文章目录 Pyecharts炫酷散点图构建指南引言安装Pyecharts基础散点图自定义散点图样式渐变散点图动态散点图高级标注散点图多系列散点图3D散点图时间轴散点图笛卡尔坐标系下的极坐标系散点图 总结&#xff1a; Pyecharts炫酷散点图构建指南 引言 在数据可视化领域&#xff0c;…

[C++]:15.继承

继承 一.继承&#xff1a;1.继承的概念和基本操作&#xff1a;1.概念&#xff1a;2.基本操作&#xff1a; 2.继承格式和多种继承方法&#xff1a;1.基本继承格式&#xff1a;2.继承关系访问限定符 3.子类对象和父类对象之间的赋值&#xff1a;1.为什么存在赋值兼容转换&#xf…

第十二篇【传奇开心果系列】Python的OpenCV技术点案例示例:视频流处理

传奇开心果短博文系列 系列短博文目录Python的OpenCV技术点案例示例短博文系列短博文目录一、前言二、视频流处理介绍三、实时视频流处理示例代码四、视频流分析示例代码五、归纳总结系列短博文目录 Python的OpenCV技术点案例示例短博文系列 短博文目录 一、前言 OpenCV视频…

程序报错无法打开源文件stdafx.h

在运行代码时&#xff0c;代码中头文件突然报错程序无法打开源文件stdafx.h include “stdafx.h”,编译器就说无法打开源文件&#xff0c;直接上干货解决方法是&#xff1a; 1.打开项目 ->项目属性&#xff08;最后一个&#xff09;-> C/C ->常规&#xff0c; 2在附…

【工作周志】240129-240204

本周学习了AXI相关的内容 AMBA &#xff08;Advanced Microcontroller Bus Architecture&#xff09; AXI &#xff08;Advanced eXtensible Interface&#xff09; ARM公司提出&#xff0c;AMBA3.0协议中重要组成部分&#xff0c;是一种面向高性能、高带宽、低延迟的片内总线…

【c++】vector用法详解

vector用法详解 vector定义vector容器的构造函数vector容器内元素的访问1.通过下标 [ ]来访问2.通过迭代器来访问3.通过范围for来访问 vector常用函数的用法解析1.size()2.clear()3.capacity()4.reserve()5.resize()6.shrink_to_fit()7.pop_back()8.push_back()9.erase()10.in…

python基于django的公交线路查询系统mf383

1.个人信息的管理&#xff1a;对用户名&#xff0c;密码的增加、删除等 2.线路信息的管理&#xff1a;对线路的增加、修改、删除等 3.站点信息的管理&#xff1a;对站点的增加、修改、删除等 4.车次信息的管理&#xff1a;对车次的增加、修改、删除等 5.线路查询、站点查询 …

已解决: ModuleNotFoundError: No module named ‘tensorflow‘ 问题

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

nba2k24 球魁面补【23-24通用】

nba2k24 球魁面补 nba2k23-nba2k24通用 球魁面补 下载地址&#xff1a; https://www.changyouzuhao.cn/9841.html

蓝桥杯省赛无忧 课件91 高斯消元

01 算法概述 02 问题引入 03 算法分析 04 例题

Linux 多线程 | 线程的概念

线程的概念 线程是一个执行分支&#xff0c;执行粒度比进程更细&#xff0c;调度成本更低&#xff1b; 线程是进程内部的一个执行流&#xff1b; 线程是CPU调度的基本单位&#xff0c;进程是承担分配系统资源的基本实体。 之前我们学习过虚拟地址空间的知识&#xff0c;知道…

NetSuite 权限不足用户如何查询完整数据

假设我们做了一个Saved Search&#xff0c;用于统计所有涉及库存的事务类型&#xff0c;包括出入库、库存调整、生产报工、拆解、Standalone Invoice和Bill&#xff0c;等等。通过合计这些事务类型&#xff0c;我们就可以得到一个存货报表&#xff0c;能够得到任一时间点的库存…

线程同步解析

一 线程同步 1 同步的意义 现实中抢票可能没票了还在抢票&#xff0c;然后线程就会一直在加锁解锁&#xff0c;就会导致其它线程抢不到锁而产生饥饿问题&#xff0c;我们前面也提过usleep就是让线程被切换&#xff0c;能让其它线程去申请锁&#xff0c;这种方式并不好&#xf…

蓝桥杯备战——13.PCF8591芯片的使用

目录 1.芯片简介2.读写时序3.控制字4.代码封装库5.原理图分析6.使用示例 1.芯片简介 截取自NXP的PCF8591芯片数据手册&#xff0c;我把重点关注部分划出来了&#xff0c;请务必自行阅读一遍数据手册&#xff01; 2.读写时序 ①器件地址&#xff1a; Bit0决定是读还是写操作&…

最新GPT4.0使用教程,AI绘画,GPT语音对话使用,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…