cf796D

题意

n个点n-1条边,k个特殊点以及整数d,要求删除最多的边保证每个点都可以在d步之内到达一个特殊点,输入保证每个点都可以在d步内到达特殊点

思路

考虑什么时候可以删除一条边,即这条边连接的两个点可以在d步内到达两个不同的特殊点,那么删除这条边仍然保证合法,可以用bfs处理出每个点最近的特殊点,如果一条边连接的两个点所最近的特殊点不同则计算答案

代码

#include<bits/stdc++.h>#define ull unsigned long long 
#define ll long long
#define inf 1e9
#define INF 1e18
#define lc p<<1
#define rc p<<1|1
#define endl '\n'
#define all(a) a.begin()+1,a.end()
#define all0(a) a.begin(),a.end()
#define lowbit(a) (a&-a)
#define fi first
#define se second
#define pb push_back
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define i128 __int128using namespace std;
const double eps=1e-6;
typedef pair<int,int>PII;
typedef array<int,3>PIII;
mt19937_64 rnd(time(0));  const int N=3e5+10;
vector<int>e[N];void solve()
{int n,k,d;cin>>n>>k>>d;set<int>s;for(int i=1;i<=k;i++) {int x;cin>>x;s.insert(x);}vector<PII>edge(n);for(int i=1;i<n;i++){int a,b;cin>>a>>b;e[a].pb(b);e[b].pb(a);edge[i]={a,b};}queue<PII>q;for(auto t:s) q.push({t,t});vector<int>vis(n+1);while(!q.empty()){auto [cur,color]=q.front();q.pop();if(vis[cur]) continue;vis[cur]=color;for(auto ed:e[cur]) q.push({ed,color});}int cnt=0;vector<int>ans;for(int i=1;i<n;i++){auto [x,y]=edge[i];//cout<<i<<" "<<vis[x]<<" "<<vis[y]<<endl;if(vis[x]!=vis[y]){cnt++;ans.pb(i);}}cout<<cnt<<endl;for(auto t:ans) cout<<t<<" ";
}int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);solve();return 0;
}

cf1304D

题意

给定一个由>,<>,<>,<组成字符串s,sis_isi描述了排列中ai,ai+1a_i,a_{i+1}aiai+1的小大关系,构造两个满足所有大小关系的排列,并使得第一个排列的lis最小,第二个排列的lis最大

思路

对于lis最小的排列,可以先按n,n−1,n−2,...1n,n-1,n-2,...1n,n1,n2,...1排列,那么对于一段连续的<<<,我们翻转这一段,仍然满足对于任意的i<ji<ji<j除非位于段内,否则仍然满足ai>aja_i>a_jai>aj
对于lis最大的排列,先按1,2,3,..n−1,n1,2,3,..n-1,n1,2,3,..n1,n排列,翻转每一段>>>即可

代码

#include<bits/stdc++.h>#define ull unsigned long long 
#define ll long long
#define inf 1e9
#define INF 1e18
#define lc p<<1
#define rc p<<1|1
#define endl '\n'
#define all(a) a.begin()+1,a.end()
#define all0(a) a.begin(),a.end()
#define lowbit(a) (a&-a)
#define fi first
#define se second
#define pb push_back
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define i128 __int128using namespace std;
const double eps=1e-6;
typedef pair<int,int>PII;
typedef array<int,3>PIII;
mt19937_64 rnd(time(0));  void solve()
{int n;cin>>n;string s;cin>>s;s=" "+s;vector<int>a(n+1),b(n+1);for(int i=1;i<=n;i++){a[i]=n-i+1;b[i]=i;}for(int i=1;i<n;i++){if(s[i]=='<'){int j=i;while(j<n && s[j]=='<') j++;reverse(a.begin()+i,a.begin()+j+1);i=j-1;}}for(int i=1;i<n;i++){if(s[i]=='>'){int j=i;while(j<n && s[j]=='>') j++;reverse(b.begin()+i,b.begin()+j+1);i=j-1;}}for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;for(int i=1;i<=n;i++) cout<<b[i]<<" ";cout<<endl;
}int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t;cin>>t;while(t--)solve();return 0;
}

cf938D

题意

有一个乐队要开演唱会,在 n 个城市的人都想去听,但每个城市票价不同,而他们都想少花钱。给定 m 条路,包含 u, v, w 表示从城市 u 到城市 v 要花 w 元,再给出演唱会在 i 城市的票价 a[i],求每个人去听演唱会并回来的最小花费。

思路

对于点权,可以将其转化为边权,具体操作为对每个点建一个虚点连边,边权即点权,由于终点不确定,可以建立一个超级虚拟源点代表终点,并向所有虚点连边权为0的边,由于题目要求往返,所以m条边的边权要乘2,处理完之后从超级源点跑最短路即可

代码

#include<bits/stdc++.h>#define ull unsigned long long 
#define ll long long
#define inf 1e9
#define INF 1e18
#define lc p<<1
#define rc p<<1|1
#define endl '\n'
#define all(a) a.begin()+1,a.end()
#define all0(a) a.begin(),a.end()
#define lowbit(a) (a&-a)
#define fi first
#define se second
#define pb push_back
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define i128 __int128using namespace std;
const double eps=1e-6;
typedef pair<ll,int>PII;
typedef array<int,3>PIII;
mt19937_64 rnd(time(0));  const int N=2e5+10;
struct edge{ll v,w;
};
vector<edge>e[N<<2];void solve()
{int n,m;cin>>n>>m;for(int i=1;i<=m;i++){ll a,b,c;cin>>a>>b>>c;e[a].pb({b,2*c});e[b].pb({a,2*c});}vector<ll>a(n+1);for(int i=1;i<=n;i++) {cin>>a[i];e[i].pb({i+n,a[i]});e[i+n].pb({i,a[i]});e[i+n].pb({0,0});e[0].pb({i+n,0});}vector<ll>dis(2*n+1,1e18);vector<int>vis(2*n+1);priority_queue<PII,vector<PII>,greater<PII>>q;q.push({0,0});dis[0]=0;while(!q.empty()){auto [cost,cur]=q.top();q.pop();if(vis[cur]) continue;vis[cur]=1;for(auto [v,w]:e[cur]){if(cost+w<dis[v]){dis[v]=cost+w;q.push({dis[v],v});}}}for(int i=1;i<=n;i++) cout<<dis[i]<<" ";}int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);solve();return 0;
}

cf343D

题意

给定一棵树,有以下三种操作

  1. 将x的子树打上标记
  2. 将x及其所有祖先的标记清空
  3. 询问x点是否有标记

思路

树剖板子题,1操作对应子树赋值1,2操作对应x到根节点的简单路径赋值0,3操作对应单点查询

由于赋值时1和0都要使用,所以懒标记初值为-1

代码

#include<bits/stdc++.h>#define ull unsigned long long 
#define ll long long
#define inf 1e9
#define INF 1e18
#define lc p<<1
#define rc p<<1|1
#define endl '\n'
#define all(a) a.begin()+1,a.end()
#define all0(a) a.begin(),a.end()
#define lowbit(a) (a&-a)
#define fi first
#define se second
#define pb push_back
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define i128 __int128using namespace std;
const double eps=1e-6;
typedef pair<int,int>PII;
typedef array<int,3>PIII;
mt19937_64 rnd(time(0));  const int N=5e5+10;
int fa[N],dep[N],siz[N];
int son[N];//重儿子
int top[N];//所在重链顶点
int dfn[N];//dfs序
int w[N];
int tot;
int n,q;
vector<int>e[N];ll tr[N<<2],add[N<<2];void pushup(int p)
{tr[p]=tr[lc]+tr[rc];return;
}void pushdown(int p,int l,int r)
{if(add[p]==-1) return;int mid=(l+r)>>1;tr[lc]=(mid-l+1)*add[p];add[lc]=add[p];tr[rc]=(r-mid)*add[p];add[rc]=add[p];add[p]=-1;
}
void build(int p,int l,int r)
{if(l==r){tr[p]=w[l];add[p]=-1;return;}int mid=(l+r)>>1;build(lc,l,mid);build(rc,mid+1,r);pushup(p);
}void update(int p,int l,int r,int ql,int qr,int x)
{if(ql<=l && r<=qr){tr[p]=(r-l+1)*x;add[p]=x;return;}pushdown(p,l,r);int mid=(l+r)>>1;if(ql<=mid) update(lc,l,mid,ql,qr,x);if(qr>mid) update(rc,mid+1,r,ql,qr,x);pushup(p);
}ll query(int p,int l,int r,int ql,int qr)
{if(ql<=l && r<=qr) return tr[p];pushdown(p,l,r);int mid=(l+r)>>1;ll sum=0;if(ql<=mid) sum+=query(lc,l,mid,ql,qr);if(qr>mid) sum+=query(rc,mid+1,r,ql,qr);return sum;
}void update_path(int u,int v,int x)
{while(top[u]!=top[v]){if(dep[top[u]]<dep[top[v]]) swap(u,v);update(1,1,n,dfn[top[u]],dfn[u],x);u=fa[top[u]];}if(dep[u]<dep[v]) swap(u,v);update(1,1,n,dfn[v],dfn[u],x);
}ll query_path(int u,int v)
{ll res=0;while(top[u]!=top[v]){if(dep[top[u]]<dep[top[v]]) swap(u,v);//保证u的顶点更深1res+=query(1,1,n,dfn[top[u]],dfn[u]);u=fa[top[u]];}if(dep[u]<dep[v]) swap(u,v);//最后一条链res+=query(1,1,n,dfn[v],dfn[u]);return res;
}void dfs1(int u,int father)
{fa[u]=father;dep[u]=dep[father]+1;siz[u]=1;for(auto ed:e[u]){if(ed==father) continue;dfs1(ed,u);siz[u]+=siz[ed];if(siz[son[u]]<siz[ed]) son[u]=ed;}
}void dfs2(int u,int t)
{top[u]=t;dfn[u]=++tot;if(!son[u]) return;dfs2(son[u],t);//搜重儿子for(auto ed:e[u]){if(ed==fa[u] || ed==son[u]) continue;dfs2(ed,ed);//搜轻儿子}
}void solve()
{cin>>n;for(int i=1;i<n;i++){int a,b;cin>>a>>b;e[a].pb(b);e[b].pb(a);}dfs1(1,0);dfs2(1,1);build(1,1,n);cin>>q;while(q--){int op,x;cin>>op>>x;if(op==1) update(1,1,n,dfn[x],dfn[x]+siz[x]-1,1);else if(op==2) update_path(1,x,0);else cout<<query(1,1,n,dfn[x],dfn[x])<<endl;}
}int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);solve();return 0;
}

cf 2132F

题意

给定一张n个点m条边的无向图以及q次询问,每次询问求顶点v到其最近的必经路径的距离,必经路径指顶点1到n必须经过的边,边权都为1,若不存在必经路径输出-1

思路

  • 1-n的必经路径即边双缩点后1所在连通分量到所在连通分量的割边(缩点后的边一定为割边)
  • 很明显-1的情况为1和n在一个边双内,即不存在割边
  • 缩点后处理出所有的必经路径,将每条必经路径的顶点跑多源bfs即可

代码

#include<bits/stdc++.h>#define ull unsigned long long 
#define ll long long
#define inf 1e9
#define INF 1e18
#define lc p<<1
#define rc p<<1|1
#define endl '\n'
#define all(a) a.begin()+1,a.end()
#define all0(a) a.begin(),a.end()
#define lowbit(a) (a&-a)
#define fi first
#define se second
#define pb push_back
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define i128 __int128using namespace std;
const double eps=1e-6;
typedef pair<int,int>PII;
typedef array<int,3>PIII;
mt19937_64 rnd(time(0));  const int N=2e6+10;
struct edge{int to,ne;//终点,下一条边
}e[N];
int h[N];
int idx=1;
int dfn[N],low[N],tot;
stack<int>stk;int dcc[N],cnt;
int bri[N];vector<int>e1[N];void add(int a,int b)
{e[++idx].to=b;e[idx].ne=h[a];h[a]=idx;
}struct node{ll cost,id,u;bool operator < (const node&t)const{return cost!=t.cost ? cost>t.cost : id>t.id;}
};void tarjan(int x,int in_edg)
{dfn[x]=low[x]=++tot;stk.push(x);for(int i=h[x];i;i=e[i].ne){int y=e[i].to;if(!dfn[y]){tarjan(y,i);low[x]=min(low[x],low[y]);if(low[y]>dfn[x]) bri[i]=bri[i^1]=true;}else if(i!=(in_edg^1)) low[x]=min(low[x],dfn[y]);}if(dfn[x]==low[x]){++cnt;while(1){int y=stk.top();stk.pop();dcc[y]=cnt;if(y==x) break;}}
}void solve()
{int n,m;cin>>n>>m;for(int i=1;i<=n;i++){e[i]={0,0};e1[i].clear();h[i]=low[i]=dfn[i]=0;dcc[i]=bri[i]=0;}cnt=tot=0;idx=1;vector<int>x(m+1),y(m+1);for(int i=1;i<=m;i++){cin>>x[i]>>y[i];add(x[i],y[i]);add(y[i],x[i]);}tarjan(1,0);if(dcc[1]==dcc[n]){int q;cin>>q;while(q--){int c;cin>>c;cout<<-1<<" ";}cout<<endl;return;}for(int i=1;i<=m;i++){if(dcc[x[i]]!=dcc[y[i]]){e1[dcc[x[i]]].pb(dcc[y[i]]);e1[dcc[y[i]]].pb(dcc[x[i]]);}}vector<int>pre(n+1);auto dfs=[&](auto &&dfs,int u,int fa)->void{pre[u]=fa;for(auto ed:e1[u]){if(ed==fa) continue;dfs(dfs,ed,u);}};dfs(dfs,dcc[1],0);vector<int>must(n+1);//标记必经路径点int cur=dcc[n];//cout<<cur<<endl;while(cur!=dcc[1]){//cout<<cur<<endl;must[cur]=1;cur=pre[cur];}must[dcc[1]]=1;priority_queue<node>pq;for(int i=1;i<=m;i++){int u=dcc[x[i]];int v=dcc[y[i]];if(u==v) continue;if(must[u] && must[v]){//cout<<x[i]<<" "<<y[i]<<endl;pq.push({0,i,x[i]});pq.push({0,i,y[i]});}}vector<int>ans(n+1);while(!pq.empty()){auto [cost,id,cur]=pq.top();pq.pop();if(ans[cur]) continue;ans[cur]=id;for(int i=h[cur];i;i=e[i].ne){int y=e[i].to;if(ans[y]) continue;pq.push({cost+1,id,y});}}int q;cin>>q;while(q--){int c;cin>>c;cout<<ans[c]<<" ";}cout<<endl;
}int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t;cin>>t;while(t--)solve();return 0;
}

cf1436D

题意

一棵树,每个点的权值可以分给它的子节点,求使得叶子节点中权值的最大值最小的值

思路

  • 对于一颗权值和为sizsizsiz,叶子数为cntcntcnt的子树,使最大值最小的分法显然为⌈sizcnt⌉\lceil \frac{siz}{cnt} \rceilcntsiz,即让叶子节点均分总权值,但是若存在一个叶子节点的权值siz[u]>⌈sizcnt⌉siz[u]>\lceil \frac{siz}{cnt} \rceilsiz[u]>cntsiz,那么此时叶子节点的最大值就为siz[u]siz[u]siz[u]
  • 根据以上可得到dp[u]=max(siz[v],⌈sizcnt⌉)dp[u]=max(siz[v],\lceil \frac{siz}{cnt} \rceil)dp[u]=max(siz[v],cntsiz⌉),其中siz[v]siz[v]siz[v]为u为根的最大叶子节点权值
#include<bits/stdc++.h>#define ull unsigned long long 
#define ll long long
#define inf 1e9
#define INF 1e18
#define lc p<<1
#define rc p<<1|1
#define endl '\n'
#define all(a) a.begin()+1,a.end()
#define all0(a) a.begin(),a.end()
#define lowbit(a) (a&-a)
#define fi first
#define se second
#define pb push_back
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define i128 __int128using namespace std;
const double eps=1e-6;
typedef pair<int,int>PII;
typedef array<int,3>PIII;
mt19937_64 rnd(time(0));  const int N=2e5+10;
vector<int>e[N];void solve()
{int n;cin>>n;for(int i=2;i<=n;i++){int x;cin>>x;e[x].pb(i);}vector<ll>dp(n+1);//i为根的子树答案vector<ll>cnt(n+1);//叶子vector<ll>siz(n+1);//子树权值for(int i=1;i<=n;i++) cin>>siz[i];for(int i=1;i<=n;i++) if(!e[i].size()) cnt[i]=1;auto dfs=[&](auto &&dfs,int u)->void{for(auto ed:e[u]){dfs(dfs,ed);siz[u]+=siz[ed];cnt[u]+=cnt[ed];dp[u]=max(dp[u],dp[ed]);}dp[u]=max(dp[u],(siz[u]+cnt[u]-1)/cnt[u]);};dfs(dfs,1);cout<<dp[1]<<endl;
}int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);solve();return 0;
}

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

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

相关文章

像WPS Office 一样处理pdf页面尺寸

1. 修改页面尺寸import os import shutil import fitz # PyMuPDFdef cm_to_px(cm):# 厘米转换成像素"""doc fitz.open(input_file)page0 doc[0]width_px page0.mediabox.widthheight page0.mediabox.heightprint(fwidth_px&#xff1a;{width_px} height&a…

Linux 基础开发工具

在 Linux 环境下进行开发&#xff0c;熟练掌握基础工具是提升效率、解决问题的核心前提。无论是软件安装、代码编辑&#xff0c;还是编译调试、版本管理&#xff0c;一套 “趁手” 的工具链能让开发过程事半功倍。本文将从 Linux 开发最核心的七大工具模块入手&#xff0c;一步…

TapData vs Kafka ETL Pipeline:竞争?共存?——企业实时数据策略的正确打开方式

【引言】企业实时数据流转&#xff0c;迎来“集成计算”新范式 企业 IT 架构的演进&#xff0c;从最初的数据孤岛&#xff0c;到集中式数据仓库&#xff0c;再到如今的实时数据驱动架构。在这一过程中&#xff0c;数据的集成&#xff08;数据源→目标&#xff09;与数据的计算&…

十九、云原生分布式存储 CubeFS

十九、云原生分布式存储 CubeFS 文章目录十九、云原生分布式存储 CubeFS1、分布式存储初识1.1 分布式存储主要特性1.2 为什么要在K8s上落地存储平台1.3 云原生存储平台CubeFS介绍1.4 分布式存储平台落地架构1.4.1 混合部署1.4.2 独立部署-基础设施集群1.5 资源分配建议1.6 硬件…

如何拯救一家濒临破产的科技公司?

从谷底爬起&#xff1a;Medium 的生死重生之路 2022年的 Medium&#xff0c;正坠入一个深不见底的深渊。 每月亏损260万美元&#xff0c;订阅用户持续流失——这不是增长&#xff0c;而是在消耗资本。更致命的是内容质量&#xff1a;平台充斥着“快速致富学”等空洞内容&#x…

数据结构-算法(一)

一、已知无向图的邻接矩阵&#xff0c;求无向图的邻接表。 &#xff08;1&#xff09;提示&#xff1a;无向图如下图(a)所示&#xff0c;已知邻接矩阵如图(b)所示&#xff0c;求对应的邻接表(c)。&#xff08;2&#xff09;请定义void adjMatrix_2_adjList(int b[4][4], AdjLis…

2025年嵌入式通信电源系统品牌有哪些?

现在科技跑得飞快&#xff0c;嵌入式通信电源系统可是越来越吃香了&#xff0c;尤其是在5G、物联网、智能家居这些热门地方。这玩意儿不光能让设备稳稳当当干活儿&#xff0c;还特省电、贼聪明&#xff0c;优势杠杠的&#xff01;既然大家伙儿都这么需要它&#xff0c;那到了20…

Ubuntu24.04环境下causal_conv1d和mamba_ssm安装

环境&#xff1a;WSL的Ubuntu24.041.创建conda环境&#xff0c;其中python版本为3.10.132.当前conda环境依次执行下面命令&#xff1a;conda install cudatoolkit11.8 -c nvidia pip install torch2.1.1 torchvision0.16.1 torchaudio2.1.1 -f https://mirrors.aliyun.com/pyto…

Python爬虫实战: 爬虫常用到的技术及方案详解

爬虫是获取网络数据的重要工具,Python因其丰富的库生态系统而成为爬虫开发的首选语言。下面我将详细介绍Python爬虫的常用技术和方案。 一、基础技术栈 1. 请求库 Requests - 同步HTTP请求库 import requests# 基本GET请求 response = requests.get(https://httpbin.org/g…

k8s——持久化存储 PVC

目录 k8s持久化存储&#xff1a; PVC 1 k8s PV是什么&#xff1f; 2 k8s PVC是什么&#xff1f; 3 k8s PVC和PV工作原理 4 创建pod&#xff0c;使用pvc作为持久化存储卷 ​三种回收策略详解​ 1、创建nfs共享目录 2、如何编写pv的资源清单文件 3、创建pv 更新资源清单文…

【系统架构设计师】数据库设计(一):数据库技术的发展、数据模型、数据库管理系统、数据库三级模式

数据库技术是研究数据库的结构、存储、设计、管理和应用的一门软件学科。 数据库系统本质上是一个用计算机存储信息的系统。 数据库管理系统是位于用户与操作系统之间的一层数据管理软件&#xff0c;其基本目标是提供一个可以方便、有效地存取数据库信息的环境。 数据库就是信息…

深入理解 Structured Outputs:基于 JSON Schema 的结构化输出实践指南

深入理解 Structured Outputs&#xff1a;基于 JSON Schema 的结构化输出实践指南 目录 引言Structured Outputs 概述应用场景与优势核心用法&#xff1a;结构化响应的获取功能对比&#xff1a;Structured Outputs 与 JSON 模式典型应用示例链式思维&#xff08;Chain of Tho…

大模型应用编排工具Dify之插件探索

1.前言 ​ dify 1.x版本以后插件功能丰富了很多&#xff0c;推出的插件市场上有各式各样的插件&#xff0c;比如 连接数据库、连接大模型、搜索和 mcp服务等。其中&#xff0c;有一个比较大的改动&#xff0c;模型供应商不再内置&#xff0c;而是通过插件的形式提供。因此&…

ubuntu2204安装搜狗拼音输入法

安装必要的软件包 sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-config-qt fcitx5-configtool -y安装搜狗拼音 下载最新 .deb 包&#xff08;官方地址&#xff1a;https://pinyin.sogou.com/linux/&#xff09;&#xff0c;安装&#xff1a; sudo dp…

三,设计模式-抽象工厂模式

目的 在 工厂模式 中&#xff0c;当需要创建新的产品时&#xff0c;则额外需要创建新的工厂&#xff0c;这种模式是对产品制造方法的抽象化&#xff0c;如果产品种类变多&#xff0c;则工厂数目变多&#xff0c;则代码规模会越来越大&#xff0c;且不同的产品类的生成依赖不同…

Vue3响应式编程核心:ref与reactive全方位对比

在Vue3的Composition API中&#xff0c;ref和reactive是构建响应式数据的核心工具。许多开发者对它们的选择存在困惑&#xff1a;何时用ref的.value&#xff1f;何时用reactive的直接访问&#xff1f;为何解构会丢失响应性&#xff1f;本文从原理、场景到实战陷阱&#xff0c;为…

Redis实战-缓存的解决方案(一)

1.什么是缓存缓存就是数据交换的缓存区&#xff0c;是存储数据的临时区域&#xff0c;读写性能高。浏览器会有缓存&#xff0c;tomcat服务器也会有缓存&#xff0c;数据库也会有缓存&#xff0c;CPU也会有缓存&#xff0c;磁盘也会有缓存&#xff0c;所以说缓存是无处不在的并且…

CI/CD企业案例详解

7.持续集成持续交付企业示例 为了让容器构建镜像可以持续集成并自动上传到harbor仓库&#xff0c;业务主机通过持续交付自动从仓库中下载镜像最近版本并实现业务更新7.1 在jenkins中添加registry节点 7.1.1 在业务节点中安装docker和java环境并配置其可以从仓库中下载镜像 # 新…

C++ 入门核心知识

一、C 课程概述与发展历史1. 发展历程&#xff1a;从 C 语言扩展到标准化C 的起源可追溯至 1979 年&#xff0c;由贝尔实验室的 Bjarne Stroustrup 主导开发。当时他为解决大型项目开发中 C 语言在可维护性和扩展性上的不足&#xff0c;在 C 语言基础上引入了面向对象编程特性。…