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

P11369 [Ynoi2024] 弥留之国的爱丽丝(操作分块,DAG可达性trick)

真的神仙题。感觉学到了很多。

题意:

给你一张 n n n 个结点 m m m 条边的有向图,点编号为 1 , 2 , … , n 1,2,\dots,n 1,2,,n。每条边的颜色为黑色或白色。一开始所有 m m m 条边都是黑色的。

你需要进行 q q q 次操作,有两种操作:

  • 1 k:将第 k k k 条边的颜色反转。
  • 2 u v:询问是否能只经过黑色边从 u u u 到达 v v v

2 ≤ n ≤ 5 × 1 0 4 , 1 ≤ m , q ≤ 1 0 5 , u ≠ v 2 \leq n \leq 5 \times 10^4, 1 \leq m, q \leq 10^5, u \ne v 2n5×104,1m,q105,u=v

分析

首先即使没有一操作,原问题也不弱于 D A G DAG DAG 可达性问题,因此复杂度不可能低于 O ( n m w ) O(\frac{nm}{w}) O(wnm)

如果没有一操作,我们可以缩点后跑 D A G DAG DAG 可达性。但是现在有了一操作,我们不可能每次修改后都跑一次。
想想看哪里有可以突破的地方?
发现我们只会询问 m m m 个点对的可达关系,而每次拓扑时 b i t s e t bitset bitset n n n 个点是否可达能够表示出所有 n 2 n^2 n2 个点对之间的可达关系,这好像是冗余的。

因此我们考虑 操作分块。设阈值为 B B B,每 B B B 个操作放到一起处理。
这时候就会有比较好的性质:对于一个块里的所有询问的终点,显然我们只关心所有点能不能到达这些点,因此跑拓扑排序的时候可以将 b i t s e t bitset bitset 的大小压缩至 O ( B ) O(B) O(B) 量级。

具体的:
我们考虑将当前块内 1 1 1 操作的所有边都先删去,那么剩下的边在块内操作时不会受到影响。将删去边的两端点 u , v u, v u,v 和块内 2 2 2 操作的起点终点 u ′ , v ′ u', v' u,v 称作关键点。那么显然有 O ( B ) O(B) O(B) 个关键点。

对于剩下的图 O ( n + m ) O(n + m) O(n+m) 的跑一遍 t a r j a n tarjan tarjan 缩点,然后对形成的 D A G DAG DAG O ( ( n + m ) B w ) O(\frac{(n + m) B}{w}) O(w(n+m)B) 的复杂度内跑一遍拓扑,求出缩点后关键点与关键点之间的可达关系。那么我们就可以将原来的图压缩成只有 O ( B ) O(B) O(B) 个关键点的新图。

接下来考虑怎样处理块内操作:
对于操作 1 1 1,等价于关键点之间的删边和加边。我们另开一类 b i t s e t bitset bitset g i , j g_{i, j} gi,j 表示增加的出边集合,其中 j j j 一维的大小为关键点个数。那么可以 O ( 1 ) O(1) O(1) g g g 上修改。
对于操作 2 2 2,等价于判断某一关键点能否到达另一关键点。朴素的做法是从 u ′ u' u 开始 b f s bfs bfs,复杂度 O ( ∣ E ∣ ) O(|E|) O(E)。但是这里我们压缩出的新图非常稠密, ∣ E ∣ |E| E 可以取到 B 2 B^2 B2

有一个 t r i c k trick trick:稠密图上求一个点作为起点的可达性可以 b i t s e t bitset bitset 优化 b f s bfs bfs,复杂度 O ( n 2 w ) O(\frac{n^2}{w}) O(wn2) n n n 为稠密图的点数。
具体的做法是 b f s bfs bfs 过程中开一个 b i t s e t bitset bitset n o w now now 维护当前还没有入队的点。每次将队头 u u u 的出边集合 E u E_u Eu n o w now now 取交,然后每次 . _ F i n d _ n e x t ( ) .\_ Find \_ next() ._Find_next() 找到一个点加入队列。一个点只会入队一次,和 n o w now now 取交的复杂度 O ( n 2 w ) O(\frac{n^2}{w}) O(wn2)。每次花费 O ( n w ) O(\frac{n}{w}) O(wn) 的复杂度将一个点入队,复杂度也是 O ( n 2 w ) O(\frac{n^2}{w}) O(wn2)

那么有了这个 t r i c k trick trick 我们就可以 O ( B 2 w ) O(\frac{B^2}{w}) O(wB2) 求一次询问。

总复杂度: O ( q B ( n + m ) + q ( n + m ) B B w + q B 2 w ) = O ( q B ( n + m ) + q ( n + m ) w + q B 2 w ) O(\frac{q}{B}(n + m) + \frac{q(n +m)B}{Bw} + q\frac{B^2}{w}) = O(\frac{q}{B}(n + m) + \frac{q(n +m)}{w} + q\frac{B^2}{w}) O(Bq(n+m)+Bwq(n+m)B+qwB2)=O(Bq(n+m)+wq(n+m)+qwB2)。中间能消掉的条件是 B ≥ w B \geq w Bw,将第一个和第三个式子取等得到 B B B ( n + m ) w 3 \sqrt[3]{(n + m)w} 3(n+m)w 最优。实测 B = 200 B = 200 B=200 比较优秀。

复杂度上界还是 O ( q ( n + m ) w ) O(\frac{q(n + m)}{w}) O(wq(n+m))

CODE:

// 确实是神仙题啊
// 可做的原因在于:不需要统计所有点对的可达性,只关心询问点的可达性
// 操作分块后,toopsort 时就可以只压 O(B) 个点
// 然后加边时只关注加的边两个端点是否可达,因此还是 O(B)个。 同时稠密图的bfs 可以bitset 优化到 n^2 / w
#include<bits/stdc++.h>
#define pb emplace_back
using namespace std;
const int N = 5e4 + 10;
const int M = 1e5 + 10;
const int L = 405;
int n, m, q, u[M], v[M];
int dfn[N], low[N], dfc, bel[N], Stack[N], Top, ct;
bool ins[N], bok[M]; // bok[i] = 1 的边不能用
int ans[M], exs[M];
struct edge {int v, last;
} E[M];
int head[N], tot;
inline void add(int u, int v) {E[++ tot].v = v; E[tot].last = head[u]; head[u] = tot;}
struct OP {int o, x, y;} opt[M];
void tarjan(int x) {dfn[x] = low[x] = ++ dfc; Stack[++ Top] = x; ins[x] = 1;for(int i = head[x]; i; i = E[i].last) {if(!exs[i] || bok[i]) continue;int v = E[i].v;if(!dfn[v]) tarjan(v), low[x] = min(low[x], low[v]);else if(ins[v]) low[x] = min(low[x], dfn[v]);}if(dfn[x] == low[x]) {int y; ct ++;do {y = Stack[Top --]; ins[y] = 0; bel[y] = ct;} while(y != x);}
}
vector< int > G[N];
int in[N], vec[N], len, idx[N], ID[N];
bitset< L > f[N], g[N]; // 可达性
inline void toopsort() {queue< int > q;for(int i = 1; i <= ct; i ++ ) if(!in[i]) q.push(i);while(!q.empty()) {int u = q.front(); q.pop();for(auto v : G[u]) {f[v] |= f[u];in[v] --; if(!in[v]) q.push(v);}}
}
inline int bfs(int s, int t) { // s -> tif(s == t) return 1;bitset< L > now; now.set();queue< int > q; q.push(s);while(!q.empty()) {int u = q.front(); q.pop();bitset< L > tmp = (now & (f[u] | g[u]));for(int p = tmp._Find_first(); p < L; p = tmp._Find_next(p)) {if(idx[p] == t) return 1;q.push(idx[p]); now.reset(p);}}return 0;
}
inline void solve(int l, int r) { // 处理 [l, r] 的操作for(int i = l; i <= r; i ++ ) if(opt[i].o == 1) bok[opt[i].x] = 1;dfc = 0; ct = 0;for(int i = 1; i <= n; i ++ ) dfn[i] = low[i] = 0, ins[i] = 0;for(int i = 1; i <= n; i ++ ) {if(!dfn[i]) tarjan(i);}len = 0;for(int i = l; i <= r; i ++ ) {if(opt[i].o == 1) vec[++ len] = bel[u[opt[i].x]], vec[++ len] = bel[v[opt[i].x]];else vec[++ len] = bel[opt[i].y];}sort(vec + 1, vec + len + 1);len = unique(vec + 1, vec + len + 1) - (vec + 1);for(int i = 1; i <= len; i ++ ) {idx[i] = vec[i]; ID[vec[i]] = i; // 编号f[vec[i]].set(i);}for(int i = 1; i <= n; i ++ ) {for(int j = head[i]; j; j = E[j].last ) {if(bok[j] || !exs[j]) continue;if(bel[i] != bel[E[j].v]) G[bel[E[j].v]].pb(bel[i]), in[bel[i]] ++;}}toopsort();for(int i = l; i <= r; i ++ ) {if(opt[i].o == 1) if(exs[opt[i].x]) g[bel[u[opt[i].x]]].set(ID[bel[v[opt[i].x]]]);}for(int i = l; i <= r; i ++ ) { // 处理询问if(opt[i].o == 1) {exs[opt[i].x] ^= 1; bok[opt[i].x] = 0;if(!exs[opt[i].x]) g[bel[u[opt[i].x]]].reset(ID[bel[v[opt[i].x]]]);else g[bel[u[opt[i].x]]].set(ID[bel[v[opt[i].x]]]);}else ans[i] = bfs(bel[opt[i].x], bel[opt[i].y]);}for(int i = 1; i <= ct; i ++ ) {G[i].clear(); f[i].reset(); g[i].reset();}
}
int main() {scanf("%d%d%d", &n, &m, &q);for(int i = 1; i <= m; i ++ ) {scanf("%d%d", &u[i], &v[i]);exs[i] = 1; add(u[i], v[i]);}for(int i = 1; i <= q; i ++ ) {scanf("%d%d", &opt[i].o, &opt[i].x);if(opt[i].o == 2) scanf("%d", &opt[i].y);}int B = 200;for(int i = 1; i <= q; i += B ) solve(i, min(q, i + B - 1)); for(int i = 1; i <= q; i ++ ) if(opt[i].o == 2) puts(ans[i] == 1 ? "YES" : "NO");return 0;
}

总结

  1. D A G DAG DAG 可达性统计的复杂度不低于平方,最优为 / w /w /w
  2. 操作分块后要注意那些信息是可以不维护以减小复杂度的。
  3. 稠密图上 b i t s e t bitset bitset 优化 b f s bfs bfs t r i c k trick trick 要记住。

相关文章:

P11369 [Ynoi2024] 弥留之国的爱丽丝(操作分块,DAG可达性trick)

真的神仙题。感觉学到了很多。 题意&#xff1a; 给你一张 n n n 个结点 m m m 条边的有向图&#xff0c;点编号为 1 , 2 , … , n 1,2,\dots,n 1,2,…,n。每条边的颜色为黑色或白色。一开始所有 m m m 条边都是黑色的。 你需要进行 q q q 次操作&#xff0c;有两种操作…...

NAT穿越

概述 IPSec协商是通过IKE完成--->ISAKMP协议完成--->由UDP封装&#xff0c;源目端口均为500。 NAT--->NAPT&#xff0c;同时转换IP和端口信息。 对端设备会查验收到的数据报文中的源IP和源端口&#xff0c;其中源IP可以设定为NAT转换后的IP&#xff0c;但是源端口无法…...

不黑文化艺术学社首席艺术家孙溟㠭浅析“雪渔派”

孙溟㠭浅析“雪渔派” 何震 字主臣 &#xff0c;长卿&#xff0c;号雪渔&#xff0c;安徽婺源&#xff08;今江西&#xff09;人&#xff0c;是明代著名的篆刻家和书法家&#xff0c;与文彭独树一帜&#xff0c;实现书法与刀法的统一。 云中白鹤 笑谭间气吐霓虹 边款 其篆刻吸…...

【Linux操作系统】第一弹——Linux基础篇

文章目录 &#x1f4a1; 一. Linux的基本常识&#x1fa94; 1.1 linux网络连接三种方式&#x1fa94;1.2 虚拟机的克隆&#x1fa94;1.3 虚拟机的快照&#x1fa94;1.4 虚拟机的迁移和删除&#x1fa94;1.5 vmtools工具 &#x1f4a1;二. Linux的目录结构&#x1fa94;2.1 Linu…...

“ES7+ React/Redux/React-Native snippets“常用快捷前缀

请注意&#xff0c;这是一个常用的列表&#xff0c;不是扩展提供的所有前缀。最完整和最新的列表请参考扩展的官方文档或在 VS Code 中查看扩展的详情页面。 React (通常用于 .js, .jsx, .ts, .tsx): rfce: React Functional Component with Export Defaultrafce: React Arro…...

selenium替代----playwright

安装 好处特点&#xff1a;这个东西不像selenium需要固定版本的驱动 pip config set global.index-url https://mirrors.aliyun.com/pypi/simplepip install --upgrade pippip install playwright playwright installplaywright install ffmpeg (处理音视频的)验证&#x…...

2025年社交APP安全防御指南:抵御DDoS与CC攻击的实战策略

2025年&#xff0c;社交APP的用户规模与业务复杂度持续增长&#xff0c;但随之而来的DDoS与CC攻击也愈发隐蔽和智能化。攻击者通过AI伪造用户行为、劫持物联网设备&#xff0c;甚至利用区块链漏洞发起混合攻击&#xff0c;对平台稳定性与用户数据安全构成严峻挑战。本文将结合最…...

PHP会话技术

第十六章-PHP会话技术 PHP会话技术是构建动态、个性化Web应用的核心机制之一&#xff0c;它通过跟踪用户在网站上的连续操作状态&#xff0c;实现了网页间的数据持久化交互。无论是电商平台的购物车信息保存、社交媒体的用户登录状态维持&#xff0c;还是表单数据的跨页面传递…...

QT聊天项目DAY10

1.封装redis操作类 头文件 #ifndef REDISMANAGE_H #define REDISMANAGE_H#include "Singletion.h" #include "GlobalHead.h"class RedisManage : public Singletion<RedisManage> {friend class Singletion<RedisManage>; public:~RedisMana…...

5.0.5 变换(旋转、缩放、扭曲)

WPF变换可以产生特殊效果,如平移、旋转、扭曲。 变换类 描述TranslateTransform沿着X轴和Y轴平移ScaleTransform 沿着定义的中心点缩放RotateTransform沿着定义的中心点旋转SkewTransform 扭曲元素MatrixTransfrom提供3x3矩阵,用于定义一个自定义变换 1…...

matlab转python

1 matlab2python开源程序 https://blog.csdn.net/qq_43426078/article/details/123384265 2 网址 转换网址&#xff1a;https://app.codeconvert.ai/code-converter?inputLangMatlab&outputLangPython 文件比较网址&#xff1a;https://www.diffchecker.com/text-comp…...

什么是直播美颜SDK?跨平台安卓、iOS美颜SDK开发实战详解

时下&#xff0c;尤其在社交、娱乐、电商等应用场景中&#xff0c;一个流畅且效果自然的美颜功能往往能直接影响用户的留存率和平台的营收。要实现这些效果&#xff0c;美颜SDK是核心工具。那么&#xff0c;什么是直播美颜SDK&#xff1f;它的功能有哪些&#xff1f;如何进行跨…...

大尺寸PCB如何重塑通信与新能源产业格局

在5G通信基站与新能源电站的机房内&#xff0c;一块块面积超过600mm600mm的PCB板正悄然推动着技术革命。作为电子设备的核心载体&#xff0c;大尺寸PCB凭借其高密度集成与复杂工艺&#xff0c;成为通信、能源等领域的“隐形功臣”。以猎板PCB为代表的厂商&#xff0c;凭借宽幅曝…...

JavaSE核心知识点02面向对象编程02-04(包和导入)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 JavaSE核心知识点02面向对象编程02-04&#…...

【漫话机器学习系列】249.Word2Vec自然语言训练模型

【自然语言处理】用 Word2Vec 将词语映射到向量空间详解 一、背景介绍 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;我们常常需要将文本信息转化为机器能够理解和处理的形式。传统的方法&#xff0c;如 one-hot编码&#xff0c;虽然简单&#xff0c;但存在严重…...

CSS transition过渡属性

transition 是 CSS 中用于创建平滑动画效果的属性&#xff0c;它允许元素在两个状态之间平滑过渡&#xff0c;而不是立即改变。通过定义过渡的属性、持续时间和速度曲线&#xff0c;你可以实现丰富的交互体验&#xff0c;如悬停效果、状态切换动画等。 核心作用 平滑过渡&…...

U9C对接飞书审批流完整过程

U9C虽然很强大&#xff0c;但是移动办公和审批流功能并不好用&#xff0c;为了弥补U9C这种不足&#xff0c;很多的企业在使用U9C的同时再开通钉钉、飞书、企业微信这种OA管理系统&#xff0c;两套系统并行使用&#xff0c;就需要考虑U9C和OA系统数据同步的问题&#xff0c;最简…...

阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化

作者&#xff1a;裘文成&#xff08;翊韬&#xff09; 摘要 随着企业全球化业务的扩展&#xff0c;如何高效、经济且可靠地将分布在海外各地的应用与基础设施日志统一采集至阿里云日志服务 (SLS) 进行分析与监控&#xff0c;已成为关键挑战。 本文聚焦于阿里云高性能日志采集…...

从0开始学习大模型--Day04--大模型的框架以及基本元素

Agent框架与策略分析 计划与执行&#xff08;planning-and-Execute&#xff09; 该框架侧重于先规划一系列的行动&#xff0c;然后执行。这个框架可以使大模型能够先综合考虑任务的多个方面&#xff0c;然后按照计划进行行动&#xff0c;比较适合应用在较复杂的项目管理中或者…...

FPGA实战项目2———多协议通信控制器

1. 多协议通信控制器模块 (multi_protocol_controller) 简要介绍 这是整个设计的顶层模块,承担着整合各个子模块的重要任务,是整个系统的核心枢纽。它负责协调 UART、SPI、I2C 等不同通信协议模块以及 DMA 模块的工作,同时处理不同时钟域之间的信号交互,确保各个模块能够…...

strings.Builder 使用详解

目录 1. 官方包 2. 支持版本 3. 官方说明 官方示例 方法 func (b *Builder) Cap() int func (b *Builder) Grow(n int) func (b *Builder) Len() int func (b *Builder) Reset() func (b *Builder) String() string func (b *Builder) Write(p []byte) (int, error)…...

数巅智能携手北京昇腾创新中心深耕行业大模型应用

当前&#xff0c;AI技术正在加速向各行业深度渗透,成为驱动产业转型和社会经济发展的重要引擎。构建开放协作的AI应用生态体系、推动技术和应用深度融合&#xff0c;已成为行业发展的重要趋势。 近日&#xff0c;数巅智能与北京昇腾人工智能计算中心&#xff08;北京昇腾创新中…...

【嵌入式系统设计师(软考中级)】第二章:嵌入式系统硬件基础知识——⑤电源及电路设计

文章目录 7. 嵌入式系统电源分类及管理7.1 嵌入式系统电源分类7.2 电源管理技术7.3 电源完整性设计 8. 电子电路设计8.1 电子电路设计基础知识8.1.1 电子电路设计原理8.1.2 电子电路设计方法及步骤8.1.3 电子电路可靠性设计 8.2 PCB设计基础知识8.2.1 PCB设计原理8.2.2 PCB设计…...

排序算法-希尔排序

希尔排序是插入排序的改进版&#xff0c;通过将原始数组分成多个子序列进行间隔插入排序&#xff0c;逐步缩小间隔直至为1&#xff0c;最终完成整体排序。它也被称为缩小增量排序。 希尔排序步骤 选择增量序列&#xff08;Gap Sequence&#xff09;&#xff1a;确定一个递减的…...

JAVA继承中变量和方法的存储和方法中访问变量的顺序

一、变量归属与内存位置 static 变量&#xff1a;属于类&#xff0c;只存在一份&#xff0c;保存在方法区&#xff08;或元空间&#xff09;。 实例变量&#xff08;非static&#xff09;&#xff1a;属于对象&#xff0c;每个对象单独一份&#xff0c;保存在堆内存中。 二、…...

【PhysUnits】3.3 SI 基础量纲单位(units/base.rs)

一、源码 这段代码定义了一系列基础物理量纲的类型别名&#xff0c;并使用标记 trait Canonical 来表示它们是国际单位制&#xff08;SI&#xff09;中的基本单位。 use crate::Dimension; use typenum::{P1, Z0};/// 标记特质&#xff0c;表示基础量纲单位 pub trait Canoni…...

stm32F103芯片 实现PID算法控制温度例程

目录 硬件需求 软件需求 步骤 1. 配置STM32CubeMX 2. 编写PID控制代码 3. 编译和烧录 4. 测试 注意事项 要在STM32F103芯片上实现PID算法控制温度,首先需要确保你有一套完整的硬件和软件开发环境。这里,我将给你一个简化的例程,展示如何使用PID控制算法来调节一个假…...

Java学习手册:微服务设计原则

一、单一职责原则 每个微服务应该专注于一个特定的业务功能&#xff0c;具有清晰的职责边界。这有助于保持服务的简洁性&#xff0c;降低服务之间的耦合度&#xff0c;提高服务的可维护性和可扩展性。例如&#xff0c;可以将用户管理、订单管理、支付管理等功能分别设计为独立…...

【挑战项目】 --- 微服务编程测评系统(在线OJ系统)(二)

三十二、Swagger介绍&使用 官网:https://swagger.io/ 什么是swagger Swagger是一个接口文档生成工具,它可以帮助开发者自动生成接口文档。当项目的接口发生变更时,Swagger可以实时更新文档,确保文档的准确性和时效性。Swagger还内置了测试功能,开发者可以直接在文档中…...

Unity背景随着文字变化而变化

组件结构&#xff1a; 背景&#xff08;父&#xff09;需要添加如下两个组件 根据具体情况选择第一个组件水平还是垂直&#xff0c;一般垂直用的比较多 效果展示&#xff1a; 此时在文本框中改变内容背景图都会随着变化&#xff0c;动态的...

Elasticsearch内存管理与JVM优化:原理剖析与最佳实践

#作者&#xff1a;孙德新 文章目录 一、Elasticsearch缓存分类1、Node Query Cache&#xff1a;2、Shard Request Cache&#xff1a;3、Fielddata Cache&#xff1a; 三、内存常见的问题案例一案例二案例三案例四 四、内参分配最佳实践1、jvm heap分配2、将机器上少于一半的内…...

快速开发-基于Gin框架搭建web应用

一、概述 Go 语言的 Gin 框架是一个用 Go (Golang) 编写的 Web 框架&#xff0c;它旨在提供一种快速、简洁且高效的方式来构建 Web 应用程序。Gin 框架以其高性能和易用性而闻名&#xff0c;非常适合构建 API 服务、Web 服务和其他需要高性能的 Web 应用。 二、Gin框架…...

【RAG】RAG系统——langchain 的用法(说人话版与专业版)

说人话版&#xff1a; RAG就是一句话&#xff1a;对数据设置索引&#xff0c;用问题去检索&#xff0c;用llm生成回答 首先&#xff0c;做本地知识库 注意: py 3.10以上 配置环境变量&#xff0c;安装库 load外部数据&#xff0c;存储到本地的一个index里&#xff08;这是最…...

pycharm无法直接识别wsl

原因是我的2020 无法支持这个版本的wsl 我就换成2024版 添加中可以看到 on wsl 如果你想切到自己创建的虚拟环境 你在下面这个界面选择conda就好 这样就可以切换成你想要的环境了...

数据结构每日一题day17(链表)★★★★★

题目描述&#xff1a;假设有两个按元素值递增次排列的线性表&#xff0c;均以单链表形式存储。请编与算法将这两个单链表归并为一个按元素值依次递减排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。 算法思想&#xff1a; 1.初始化&#xff1a; 创建一个新…...

遗传算法(GA)

基本原理 算法介绍 遗传算法&#xff08;Genetic Algorithm&#xff0c;简称GA&#xff09;是一种基于自然选择和遗传学原理的搜索和优化技术。它模拟了生物进化过程&#xff0c;通过选择、交叉&#xff08;重组&#xff09;和变异等操作&#xff0c;逐步优化问题的解。 遗传…...

EPS三维测图软件

EPS三维测图软件EPS2016...

设计模式-命令模式

写在前面 Hello&#xff0c;我是易元&#xff0c;这篇文章是我学习设计模式时的笔记和心得体会。如果其中有错误&#xff0c;欢迎大家留言指正&#xff01; 一、什么是命令模式&#xff1f; 命令模式是行为模式中的一种&#xff0c;通过将请求封装成对象&#xff0c;使开发者可…...

深入理解主从数据库架构与主从复制

目录 前言1. 主从数据库概述1.1 什么是主从数据库&#xff1f;1.2 主从数据库的应用场景 2. 主从数据库的工作原理2.1 主从数据库的读写分离2.2 数据同步机制2.3 异步与同步复制模式 3. 主从复制的实现步骤3.1 配置主库3.2 配置从库 4. 主从数据库架构的优缺点4.1 优点4.2 缺点…...

【C】初阶数据结构15 -- 计数排序与稳定性分析

本文主要讲解七大排序算法之外的另一种排序算法 -- 计数排序 目录 1 计数排序 1&#xff09; 算法思想 2&#xff09; 代码 3&#xff09; 时间复杂度与空间复杂度分析 &#xff08;1&#xff09; 时间复杂度 &#xff08;2&#xff09; 空间复杂度 4&#xff09; 计…...

@PostConstruct @PreDestroy

PostConstruct 是 Java EE&#xff08;现 Jakarta EE&#xff09;中的一个注解&#xff0c;用于标记一个方法在对象初始化完成后立即执行。它在 Spring 框架、Java Web 应用等场景中广泛使用&#xff0c;主要用于资源初始化、依赖注入完成后的配置等操作。 1. 基本作用 执行时…...

2025数维杯数学建模A题完整限量论文:空中芭蕾——蹦床运动的力学行为分析

2025数维杯数学建模A题完整限量论文&#xff1a;空中芭蕾——蹦床运动的力学行为分析 &#xff0c;先到先得 A题完整论文https://www.jdmm.cc/file/2712067/ 蹦床&#xff08; Trampoline &#xff09;是一项运动员利用蹦床的反弹&#xff0c;在空中展示技能 技巧的竞技运动&…...

Kubernetes Gateway API 部署详解:从入门到实战

引言 在 Kubernetes 中管理网络流量一直是一个复杂而关键的任务。传统的 Ingress API 虽然广泛使用,但其功能有限且扩展性不足。Kubernetes Gateway API 作为新一代标准,提供了更强大的路由控制能力,支持多协议、跨命名空间路由和细粒度的流量管理。本文将带你从零开始部署…...

移动设备常用电子屏幕类型对比

概述 LCD 家族 &#xff08;TN、STN、TFT、IPS、VA&#xff09;依赖背光&#xff0c;性能差异主要来自液晶排列和驱动方式。OLED 以自发光为核心优势&#xff0c;但成本与寿命限制其普及。E-Paper 专为低功耗静态显示设计&#xff0c;与传统屏幕技术差异显著。 参数LCD&#…...

HarmonyOS开发-组件市场

1. HarmonyOS开发-组件市场 HarmonyOS NEXT开源组件市场是一个独立的插件&#xff0c;需通过DevEco Studio进行安装&#xff0c;可以点击下载&#xff0c;无需解压&#xff0c;直接通过zip进行安装&#xff0c;具体安装和使用方法可参考HarmonyOsNEXT组件市场使用说明。Harmony…...

效果图云渲染:价格、优势与使用技巧

对于做3D设计来说&#xff0c;渲染效果图会占用设计电脑的资源&#xff0c;如果能免去这个环节就好了。用设计电脑渲不仅拖慢电脑速度&#xff0c;遇到紧急情况无法快速渲染出来还可能耽误进度。而云渲染的出现&#xff0c;正是针对这个点——渲的快&#xff0c;价格便宜&#…...

OptiStruct实例:声振耦合超单元应用

如图10-11所示&#xff0c;本例采用一个简化的整车模型&#xff0c;模型分为车身&#xff08;含声腔&#xff09;与底盘两部分。首先分别运用CMS与CDS方法对车身&#xff08;含声腔&#xff09;模型进行缩聚&#xff0c;生成.h3d格式的CMS超单元和cps超单元&#xff0c;然后进行…...

排序算法-插入排序

插入排序是一种简单直观的排序算法&#xff0c;其核心思想是将未排序部分的元素逐个插入到已排序部分的正确位置&#xff0c;类似于整理扑克牌。 插入排序步骤 初始化&#xff1a;将序列的第一个元素视为已排序部分&#xff0c;其余为未排序部分。 选择元素&#xff1a;从未排…...

Uniapp Android/IOS 获取手机通讯录

介绍 最近忙着开发支付宝小程序和app&#xff0c;下面给大家介绍一下 app 获取通讯录的全部过程吧&#xff0c;也是这也是我app开发中的一项需求吧。 效果图如下 勾选配置文件 使用uniapp开发的童鞋都知道有一个配置文件 manifest.json 简单的说一下&#xff0c;就是安卓/ios/…...

【RAG】index环节中 关于嵌入模型和 ColBERT

1. 什么是嵌入模型&#xff1f;是不是把数据源转换为向量表示的模型&#xff1f; 是的&#xff0c;嵌入模型&#xff08;Embedding Model&#xff09;的核心功能就是将各种类型的数据&#xff08;例如&#xff0c;文本、图像、音频等&#xff09;转换成低维、稠密的向量表示。…...