【差分约束】 P3275 [SCOI2011] 糖果|省选-
本文涉及知识点
差分约束
P3275 [SCOI2011] 糖果
题目描述
幼儿园里有 N N N 个小朋友, lxhgww \text{lxhgww} lxhgww 老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候, lxhgww \text{lxhgww} lxhgww 需要满足小朋友们的 K K K 个要求。幼儿园的糖果总是有限的, lxhgww \text{lxhgww} lxhgww 想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。
输入格式
输入的第一行是两个整数 N N N, K K K。接下来 K K K 行,表示这些点需要满足的关系,每行 3 3 3 个数字, X X X, A A A, B B B。
- 如果 X = 1 X=1 X=1, 表示第 A A A 个小朋友分到的糖果必须和第 B B B 个小朋友分到的糖果一样多;
- 如果 X = 2 X=2 X=2, 表示第 A A A 个小朋友分到的糖果必须少于第 B B B 个小朋友分到的糖果;
- 如果 X = 3 X=3 X=3, 表示第 A A A 个小朋友分到的糖果必须不少于第 B B B 个小朋友分到的糖果;
- 如果 X = 4 X=4 X=4, 表示第 A A A 个小朋友分到的糖果必须多于第 B B B 个小朋友分到的糖果;
- 如果 X = 5 X=5 X=5, 表示第 A A A 个小朋友分到的糖果必须不多于第 B B B 个小朋友分到的糖果;
输出格式
输出一行,表示 lxhgww \text{lxhgww} lxhgww 老师至少需要准备的糖果数,如果不能满足小朋友们的所有要求,就输出 − 1 -1 −1。
输入输出样例 #1
输入 #1
5 7
1 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1
输出 #1
11
说明/提示
对于 30 % 30\% 30% 的数据,保证 N ≤ 100 N\leq100 N≤100
对于 100 % 100\% 100% 的数据,保证 N ≤ 100000 N\leq100000 N≤100000
对于所有的数据,保证 K ≤ 100000 , 1 ≤ X ≤ 5 , 1 ≤ A , B ≤ N K\leq100000, 1\leq X\leq5, 1\leq A, B\leq N K≤100000,1≤X≤5,1≤A,B≤N
upd 2022.7.6 \text{upd 2022.7.6} upd 2022.7.6:新添加 21 21 21 组 Hack 数据。
P3275 差分约束 缩点 拓扑排序
利用差分约束求解,解很可能有负数。 令糖果最少得小朋友得到的糖果数量是x1。所有的糖果数 -x1+1。这样糖果数是整数,且最少。
x=1,即 A-B <=0 B - A <=0
x=2 A-B <0 即 A-B <=-1
x=3 A-B >=0 即 B-A <=0
x=4 A-B >0 即B-A<0 即B-A<=-1
x=5即 A-B <= 0
最多1e5个点,边权最多1.故1e6就是极大值。
时间复杂度:O(nn) 时间超过限制。
缩点
如果有环,一定是0环或负环。负环返回-1。0环缩点。
并集查找uf记录锁在一起的点。
DFS查环。DFS(pars,pw,w,cur)
cur是当前子树的根,pars记录cur所有祖先 pw[i]记录cur的祖先i到根的边权和,1表示没有祖先i。w表示根到i的边权和。
函数外变量vis记录vis[i]是否访问。
如果vis[cur]为真,返回。
如果pw[cur]不是1,遇到环。
{
w-pw 不是0,本题答案-1。程序结束。
利用pars变量将两个cur直接所有的点和cur在uf中连通。本次DFS结束。
}
pars增加cur pw[cur]= w
枚举临接点next ,边权ew DFS(pars,pw,w+ew,next)
pars.pop_back() pw[cur]=1
vis[cur]=true
时间复杂度:O(M) M是边数。没个边访问一次。
只有第一次DFS(cur)时,会遍历cur的后续节点。如果cur已经访问完毕,vis[cur]为真;如果正在访问cur,pw[cur]不为1;这两种情况都不访问后效节点。
缩点性质
i,j,k等是0环,锁点成i。j,k的临接点变成i的临接点。
性质一:缩点后,不会让原来不连通的点连通。缩点后u → \rightarrow →i → \rightarrow →v,则缩点前u → \rightarrow →环 → \rightarrow →v。
性质二:缩点后,不会让原来连通的点不连通。缩点前u → \rightarrow →环 → \rightarrow →v,缩点后u → \rightarrow →i → \rightarrow →v。
性质三:缩点后,不会产生新环,证明类似性质一。
性质四:缩点后,被缩点的没有边。不影响top排序的正确性。
性质四:缩点会产生重边,不影响top排序的正确性。
性质五:缩点或产生自环。这个影响top排序,必须忽略。
求最小正整数解
利用拓扑排序,求最短路。便是差分约束的一个解。我们求的是最小正整数解。如果div[j] < 1,则将dis[j]即其前置节点全部+(1-dis[j])。如果i有多个直接或间接的后置节点,则dis[i]只需要增加最大值。暴力增加的时间复杂度也是O(nn)。按拓扑序可以到O(n)。
拓扑排序
不求解,直接拓扑序。初始,出度为0的i,dis[i]=1。删除出度为0的点,不断迭代处理新出度为0的点。边权为0,前置节点不小于后者节点;边权为-1,前置节点至少比后续节点大1。
错误解放
求了差分约束的一个解后,求最小值iMin,所有数+(1-iMin)。错误示例:1比2多,2比3多,1比4多。最短距离为:0,-1,-2,-1,全部+3后,就是3,2,1,2,正解是3,2,1,1。
0负1BFS
队列中有cur和cur-1,必须先处理cur-1才是最短路。遇到0边时cur-1,遇到-1边时cur-2。队列中就有了cur,cur-1,cur-2。不符合01BFS的条件。
代码
核心代码
#include <iostream>
#include <sstream>
#include <vector>
#include<map>
#include<unordered_map>
#include<set>
#include<unordered_set>
#include<string>
#include<algorithm>
#include<functional>
#include<queue>
#include <stack>
#include<iomanip>
#include<numeric>
#include <math.h>
#include <climits>
#include<assert.h>
#include<cstring>
#include<list>#include <bitset>
using namespace std;template<class T1, class T2>
std::istream& operator >> (std::istream& in, pair<T1, T2>& pr) {in >> pr.first >> pr.second;return in;
}template<class T1, class T2, class T3 >
std::istream& operator >> (std::istream& in, tuple<T1, T2, T3>& t) {in >> get<0>(t) >> get<1>(t) >> get<2>(t);return in;
}template<class T1, class T2, class T3, class T4 >
std::istream& operator >> (std::istream& in, tuple<T1, T2, T3, T4>& t) {in >> get<0>(t) >> get<1>(t) >> get<2>(t) >> get<3>(t);return in;
}template<class T = int>
vector<T> Read() {int n;scanf("%d", &n);vector<T> ret(n);for (int i = 0; i < n; i++) {cin >> ret[i];}return ret;
}template<class T = int>
vector<T> Read(int n) {vector<T> ret(n);for (int i = 0; i < n; i++) {cin >> ret[i];}return ret;
}template<int N = 1'000'000>
class COutBuff
{
public:COutBuff() {m_p = puffer;}template<class T>void write(T x) {int num[28], sp = 0;if (x < 0)*m_p++ = '-', x = -x;if (!x)*m_p++ = 48;while (x)num[++sp] = x % 10, x /= 10;while (sp)*m_p++ = num[sp--] + 48;AuotToFile();}void writestr(const char* sz) {strcpy(m_p, sz);m_p += strlen(sz);AuotToFile();}inline void write(char ch){*m_p++ = ch;AuotToFile();}inline void ToFile() {fwrite(puffer, 1, m_p - puffer, stdout);m_p = puffer;}~COutBuff() {ToFile();}
private:inline void AuotToFile() {if (m_p - puffer > N - 100) {ToFile();}}char puffer[N], * m_p;
};template<int N = 1'000'000>
class CInBuff
{
public:inline CInBuff() {}inline CInBuff<N>& operator>>(char& ch) {FileToBuf();ch = *S++;return *this;}inline CInBuff<N>& operator>>(int& val) {FileToBuf();int x(0), f(0);while (!isdigit(*S))f |= (*S++ == '-');while (isdigit(*S))x = (x << 1) + (x << 3) + (*S++ ^ 48);val = f ? -x : x; S++;//忽略空格换行 return *this;}inline CInBuff& operator>>(long long& val) {FileToBuf();long long x(0); int f(0);while (!isdigit(*S))f |= (*S++ == '-');while (isdigit(*S))x = (x << 1) + (x << 3) + (*S++ ^ 48);val = f ? -x : x; S++;//忽略空格换行return *this;}template<class T1, class T2>inline CInBuff& operator>>(pair<T1, T2>& val) {*this >> val.first >> val.second;return *this;}template<class T1, class T2, class T3>inline CInBuff& operator>>(tuple<T1, T2, T3>& val) {*this >> get<0>(val) >> get<1>(val) >> get<2>(val);return *this;}template<class T1, class T2, class T3, class T4>inline CInBuff& operator>>(tuple<T1, T2, T3, T4>& val) {*this >> get<0>(val) >> get<1>(val) >> get<2>(val) >> get<3>(val);return *this;}template<class T = int>inline CInBuff& operator>>(vector<T>& val) {int n;*this >> n;val.resize(n);for (int i = 0; i < n; i++) {*this >> val[i];}return *this;}template<class T = int>vector<T> Read(int n) {vector<T> ret(n);for (int i = 0; i < n; i++) {*this >> ret[i];}return ret;}template<class T = int>vector<T> Read() {vector<T> ret;*this >> ret;return ret;}
private:inline void FileToBuf() {const int canRead = m_iWritePos - (S - buffer);if (canRead >= 100) { return; }if (m_bFinish) { return; }for (int i = 0; i < canRead; i++){buffer[i] = S[i];//memcpy出错 }m_iWritePos = canRead;buffer[m_iWritePos] = 0;S = buffer;int readCnt = fread(buffer + m_iWritePos, 1, N - m_iWritePos, stdin);if (readCnt <= 0) { m_bFinish = true; return; }m_iWritePos += readCnt;buffer[m_iWritePos] = 0;S = buffer;}int m_iWritePos = 0; bool m_bFinish = false;char buffer[N + 10], * S = buffer;
};template<class T = int, T iDef = INT_MAX / 2>
class CDisNegativeRing //贝尔曼-福特算法
{
public:bool Dis(int N, vector<tuple<int, int, int>> edgeFromToW, int start) {vector<T> pre(N, iDef);pre[start] = 0;for (int t = 0; t < N; t++) {auto cur = pre;for (const auto& [u, v, w] : edgeFromToW) {cur[v] = min(cur[v], pre[u] + w);}if (t + 1 == N) {for (int i = 0; i < N; i++) {if (pre[i] != cur[i]) { return false; }}}pre.swap(cur);}m_vDis = pre;return true;}vector<T> m_vDis;
};class CUnionFind
{
public:CUnionFind(int iSize) :m_vNodeToRegion(iSize){for (int i = 0; i < iSize; i++){m_vNodeToRegion[i] = i;}m_iConnetRegionCount = iSize;}CUnionFind(vector<vector<int>>& vNeiBo) :CUnionFind(vNeiBo.size()){for (int i = 0; i < vNeiBo.size(); i++) {for (const auto& n : vNeiBo[i]) {Union(i, n);}}}int GetConnectRegionIndex(int iNode){int& iConnectNO = m_vNodeToRegion[iNode];if (iNode == iConnectNO){return iNode;}return iConnectNO = GetConnectRegionIndex(iConnectNO);}void Union(int iNode1, int iNode2){const int iConnectNO1 = GetConnectRegionIndex(iNode1);const int iConnectNO2 = GetConnectRegionIndex(iNode2);if (iConnectNO1 == iConnectNO2){return;}m_iConnetRegionCount--;if (iConnectNO1 > iConnectNO2){UnionConnect(iConnectNO1, iConnectNO2);}else{UnionConnect(iConnectNO2, iConnectNO1);}}bool IsConnect(int iNode1, int iNode2){return GetConnectRegionIndex(iNode1) == GetConnectRegionIndex(iNode2);}int GetConnetRegionCount()const{return m_iConnetRegionCount;}vector<int> GetNodeCountOfRegion()//各联通区域的节点数量{const int iNodeSize = m_vNodeToRegion.size();vector<int> vRet(iNodeSize);for (int i = 0; i < iNodeSize; i++){vRet[GetConnectRegionIndex(i)]++;}return vRet;}std::unordered_map<int, vector<int>> GetNodeOfRegion(){std::unordered_map<int, vector<int>> ret;const int iNodeSize = m_vNodeToRegion.size();for (int i = 0; i < iNodeSize; i++){ret[GetConnectRegionIndex(i)].emplace_back(i);}return ret;}
private:void UnionConnect(int iFrom, int iTo){m_vNodeToRegion[iFrom] = iTo;}vector<int> m_vNodeToRegion;//各点所在联通区域的索引,本联通区域任意一点的索引,为了增加可理解性,用最小索引int m_iConnetRegionCount;
};class CMyTopSort
{
public://入度为0的是叶子节点long long TopSort(const int N, const vector<tuple<int, int, int>>& edge, CUnionFind& uf) {m_vDis.assign(N, 1);m_vDis[0] = 1;vector<int> out(N);vector<vector<pair<int, int>>> neiBoBack(N);for (const auto& [u, v, w] : edge) {const int v1 = uf.GetConnectRegionIndex(v);const int u1 = uf.GetConnectRegionIndex(u);if (u1 == v1) { continue; }neiBoBack[v1].emplace_back(u1, -w);out[u1]++;}queue<int> que;for (int i = 1; i < N; i++) {if (0 == out[i]) {if (i != uf.GetConnectRegionIndex(i)) { continue; }que.emplace(i);m_vDis[i] = 1;}}while (que.size()) {const auto cur = que.front();que.pop();for (const auto& [next, w] : neiBoBack[cur]) {m_vDis[next] = max(m_vDis[next], m_vDis[cur] + w);if (0 == --out[next]) {que.emplace(next);}}}long long ans = 0;vector<int> tmp = { 1 };for (int i = 1; i < N; i++) {ans += m_vDis[uf.GetConnectRegionIndex(i)];tmp.emplace_back(m_vDis[uf.GetConnectRegionIndex(i)]);}return ans;}vector<int> m_vDis;
};
class Solution {
public:long long Ans(int N, const vector<tuple<int, int, int>> ope) {vector<tuple<int, int, int>> edge;for (const auto& [x, a, b] : ope) {if (1 == x) {//x=1,即 A-B <=0 B - A <=0edge.emplace_back(a, b, 0);edge.emplace_back(b, a, 0);}else if (2 == x) {//x = 2 A - B < 0 即 A - B <= -1edge.emplace_back(b, a, -1);}else if (3 == x) {//x=3 A-B >=0 即 B-A <=0edge.emplace_back(a, b, 0);}else if (4 == x) {//x=4 A-B >0 即B-A<0 即B-A<=-1edge.emplace_back(a, b, -1);}else if (5 == x) {//x = 5即 A - B <= 0edge.emplace_back(b, a, 0);}}for (int i = 1; i <= N; i++) {edge.emplace_back(0, i, 0);}vector<vector<pair<int, int>>> neiBo(N + 1);for (const auto& [u, v, w] : edge) {neiBo[u].emplace_back(v, w);}CUnionFind uf(N + 1);{vector<bool> vis(N + 1);bool bErr = false;function<void(vector<int>&, vector<int>&, int, int)> DFS = [&](vector<int>& pars, vector<int>& pw, int w, int cur) {if (vis[cur]) { return; }if (1 != pw[cur]) {//找到环if (0 != w - pw[cur]) { bErr = true; return; }for (int i = pars.size() - 1; pars[i] != cur; i--) {uf.Union(cur, pars[i]);}return;}pars.emplace_back(cur);pw[cur] = w;for (const auto& [next, ew] : neiBo[cur]) {DFS(pars, pw, w + ew, next);}pw[cur] = 1;pars.pop_back();vis[cur] = true;};vector<int> pars, pw(N + 1, 1);DFS(pars, pw, 0, 0);if (bErr) { return -1; }}return CMyTopSort().TopSort(N + 1, edge, uf);}
};int main() {
#ifdef _DEBUGfreopen("a.in", "r", stdin);
#endif // DEBUG ios::sync_with_stdio(0);int n, m ;cin >> n >> m ; auto ope = Read<tuple<int, int,int>>(m);
#ifdef _DEBUG //printf("n=%d", n);//Out(ks, "ks=");//Out(ope, ",ope=");//Out(edge2, ",edge2=");/*Out(que, "que=");*/
#endif // DEBUG auto res = Solution().Ans(n,ope);cout << res;return 0;
}
单元测试
int n;vector<tuple<int, int, int>> ope;TEST_METHOD(TestMethod1){n = 5, ope = { {1,1,2},{2,3,2},{4,4,1},{3,4,5},{5,4,5},{2,3,5},{4,5,1} };auto res = Solution().Ans(n, ope);AssertEx(11LL, res);}TEST_METHOD(TestMethod2){n = 4, ope = { {1,3,2},{2,2,4},{5,1,3},{3,4,2},{3,2,3},{4,3,1},{5,1,4} };auto res = Solution().Ans(n, ope);AssertEx(8LL, res);}TEST_METHOD(TestMethod3){n = 100000, ope.resize(n-1);for (int i = 1; i < n; i++) {ope[i - 1] = { 2,i,i + 1 };}auto res = Solution().Ans(n, ope);AssertEx(5000050000LL, res);}TEST_METHOD(TestMethod4){n = 700, ope.resize(n - 1);for (int i = 1; i < n; i++) {ope[i - 1] = { 1,i,i + 1 };}auto res = Solution().Ans(n, ope);AssertEx((long long)n, res);}TEST_METHOD(TestMethod5){n = 100000, ope = {};auto res = Solution().Ans(n, ope);AssertEx((long long)n, res);}TEST_METHOD(TestMethod6){n = 4, ope = { {2,1,2},{2,2,3},{2,1,4} };auto res = Solution().Ans(n, ope);AssertEx((long long)8, res);}
扩展阅读
我想对大家说的话 |
---|
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。 |
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作 |
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注 |
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。 |
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。 |
如果程序是一条龙,那算法就是他的是睛 |
失败+反思=成功 成功+反思=成功 |
视频课程
先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176
测试环境
操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。
相关文章:
【差分约束】 P3275 [SCOI2011] 糖果|省选-
本文涉及知识点 差分约束 P3275 [SCOI2011] 糖果 题目描述 幼儿园里有 N N N 个小朋友, lxhgww \text{lxhgww} lxhgww 老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求&…...
找第一个只出现一次的字符(信息学奥塞一本通-1130)
【题目描述】 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 【输入】 一个字符串,长度小于100000。 【输出】 输出第一个仅出现一次的字符,若没有则输出no。 【输入样例】 abcabd 【输出样…...
【MySQL】多表操作 —— 外键约束
目录 多表关系一对一关系一对多/多对一关系多对多关系 外键约束基本概念一对多/多对一创建外键约束外键约束下的数据操作数据插入数据删除 删除外键约束 多对多创建外键约束外键约束下的数据操作数据插入数据删除 删除外键约束 多表关系 MySQL 多表之间的关系可以概括为&#…...
自己动手打造AI Agent:基于DeepSeek-R1+websearch从零构建自己的Manus深度探索智能体AI-Research
第一章:AI Agent基础与DeepSeek-R1架构解析(1/10) 1.1 AI Agent技术演进与核心价值 人工智能代理(AI Agent)经历了从规则驱动到数据驱动的范式转移。早期基于专家系统的符号主义方法(如MYCIN医疗诊断系统…...
SpringSecurity配置(校验数据库用户信息)
文末有本篇文章的项目源码文件可供下载学习 通过SpringSecurity快速入门案例我们已经实现了基于内存的校验用户信息,但在实际项目中我们需要校验从数据库中获取的用户信息,这里我们主要是两步操作: 1.需要我们实现UserDetailsService的loadUserByUsername方法,在方法中以前端…...
中考语文的考点及相应的解题技巧
1 考点分布 1.1 作文(60 分左右) 考点:立意、选材、结构、语言表达等。要求立意深刻、新颖,选材真实、典型,结构清晰、完整,语言流畅、生动。 解题技巧:认真审题,理解题目要求和限…...
PackageManagerService
首语 PackageManagerService(以下简称PMS)是Android最核心的系统服务之一,它是应用程序包管理服务,管理手机上所有的应用程序,包括应用程序的安装、卸载、更新、应用信息的查询、应用程序的禁用和启用等。 职责 在Android系统启动过程中扫…...
基于大模型的智能客服搭建
引言:智能客服的范式转变 在数字经济浪潮中,客户服务正经历从"人力密集型"向"技术驱动型"的深刻转型。据IDC最新报告,全球智能客服市场规模预计将在2028年突破1200亿美元,年复合增长率达28.6%。这种增长背后…...
Vagrant+VMWare 安装Ubuntu24.04
背景介绍 对于众多 Windows 用户来说, 有时候需要用到 Linux 环境做一些开发或者测试. WSL 目前能覆盖到很大一部分使用场景, 但是仍然有一些场景需要用虚拟机才能解决. 开发者的痛点往往是对于虚拟机环境的配置和管理, 因为手动安装需要很长的时间, 并且每次安装完成之后需要…...
数字化转型 - 数据驱动
数字化转型 一、 数据驱动1.1 监控1.2 分析1.3 挖掘1.4 赋能 二、数据驱动案例2.1 能源工业互联网:绿色节能的数字化路径2.2 光伏产业的数字化升级2.3 数据中心的绿色转型2.4云迁移的质效优化2.5 企业数字化运营的实践2.6数字化转型的最佳实践 一、 数据驱动 从数…...
【软考-架构】11.3、设计模式-新
✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 项目中的应用设计模式创建型设计模式结构型设计模式行为型设计模式 💯考试真题题外话 项目中的应用 在实际项目中,我应用过多种设计模式来解决不同…...
leetcode0031 下一个排列-medium
1 题目: 下一个排列 官方标定难度:中等 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一…...
CmBacktrace的cmb_cfg.h
一:宏定义解析 #ifndef _CMB_CFG_H_ #define _CMB_CFG_H_#ifdef CMB_USER_CFG #include "cmb_user_cfg.h" #else /* print line, must config by user */ #define cmb_println(...) /* e.g., printf(__VA_ARGS__);printf("\r\n"…...
Redis监控:从睁眼瞎到千里眼的进化史
各位在Redis迷雾中摸黑的探险家们!今天我们要给Redis装上"天眼系统"——从连自己内存爆了都不知道的睁眼瞎,进化到连每秒哪个键被摸了几次都门儿清的监控狂魔!准备好迎接《Redisの楚门世界》了吗?👁️ 第一幕…...
mac利用“自动操作”扩展添加 Mac 访达右键菜单项
用惯了 Windows 的资源管理器,换到 Mac 的访达,最不习惯的就是不能通过右键菜单创建文件。 虽然 Mac 的 App Store 中有几个可以增加访达右键菜单的工具,但是居然都要收费(就这么一点点活都能卖钱,真是了不起…...
算法013——水果成篮
水果成篮(点击即可跳转) 这道题其实就是找到一个最长的子数组的长度,子数组中不超过两种类型的水果。 定义两个指针 left 与 right ,固定 left , 当 right 走到一个位置时,left 与 right 之间的种类 kind 2 , 当 ri…...
TCP/IP协议栈----通俗易懂(与OSI七层模型区别)
目录 一、概念 二、模型 对比 编辑(1)OSI的七层模型 (2)TCP/IP的四层模型 三、TCP/IP模型分层 (1)应用层 (2)传输层 (3)网络层 (4&…...
python中print函数的flush如何使用
在 Python 中,print 函数的 flush 参数是一个布尔值,默认值为 False。当设置为 True 时,它会强制将输出缓冲区的内容立即刷新到目标设备(通常是控制台),而不是等待缓冲区满或者程序结束时才输出。 要注意fl…...
python中有几种作用域
在 Python 中,作用域决定了变量的可见性和生命周期。Python 主要有以下四种作用域: 1. 局部作用域(Local Scope): - 在函数或方法内部定义的变量属于局部作用域。 - 这些变量只能在函数或方法内部访问。 def my_f…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_13可展开行的固定表头表格
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_13可展开行的固…...
【Java 优选算法】分治 - 快速排序
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 分治算法就是将一个问题划分为多个相同类型的子问题,解决这些子问题即解决该类问题 颜色分类 题目链接 解法 利用三指针, i, left, right,将数组分为4个区间,如下图 …...
Kafka相关的面试题
以下是150道Kafka相关的面试题及简洁回答: Kafka基础概念 1. 什么是Kafka? Kafka是一个分布式、可扩展、容错的发布-订阅消息系统,最初由LinkedIn开发,现为Apache项目。它适用于高吞吐量的场景,如大数据处理和实时数据…...
Java基础面经
Java 基础 面试官:重写与重载的区别? 重载:发生在同一个类中,若多个方法之间方法名相同、参数列表不同,则它们构成重载的关系。重载与方法的返回值以及访问修饰符无关,即重载的方法不能根据返回类型进行…...
Let’s Build AI- 实用AI导航网站
Let’s Build AI Let’s Build AI是一个在线实用AI导航网站,由社区驱动的平台,致力于为 AI 爱好者和开发人员共享资源、工具和知识等等,通过GitHub编辑内容更新,目前包括数据库、模型、开发者工具、ChatGPT提示、图像生成、模型开…...
Spring Boot集成EasyExcel
1. 初始化Spring Boot项目 首先,使用Spring Initializr(https://start.spring.io/)生成一个基本的Spring Boot项目。选择以下依赖项: Spring WebLombok (用于减少样板代码)SLF4J (用于日志记录) 2. 添加依赖 在你的pom.xml文件…...
2024年12月CCF-GESP编程能力等级认证C++编程六级真题解析
CCF-GESP C++六级真题难度与考察范围深度解析 考试定位与整体难度 CCF-GESP C++六级认证属于高阶编程能力考核,难度显著高于五级,接近信息学竞赛提高组水平,重点考察复杂算法设计、面向对象编程(OOP)深度应用及高级数据结构实现能力。试题要求考生具备将数学建模与算法优化…...
网络VLAN技术详解:原理、类型与实战配置
网络VLAN技术详解:原理、类型与实战配置 1. 什么是VLAN? VLAN(Virtual Local Area Network,虚拟局域网) 是一种通过逻辑划分而非物理连接隔离网络设备的技术。它允许管理员将同一物理网络中的设备划分为多个独立的广播…...
深入探讨RAID 5的性能与容错能力:实验与分析(磁盘阵列)
前言—— 本实验旨在探讨 RAID 5 的性能和容错能力。通过创建 RAID 5 阵列并进行一系列读写性能测试及故障模拟,我们将观察 RAID 5 在数据冗余和故障恢复方面的表现,以验证其在实际应用中的可靠性和效率。 首先说明:最少三块硬盘, 使用 4 块…...
如何让ai问答机器人通人性?
领域专用的问答机器人,数据是灵魂。通用模型的问题在于,它们虽然知识广博,但对特定领域的深度理解不足。解决这个问题的第一步,就是构建一个高质量的领域知识库。 数据要精准且全面 想让机器人真正“懂”一个领域,数…...
最新版Chrome浏览器加载ActiveX控件技术--allWebPlugin中间件一键部署浏览器扩展
allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…...
重生之我在学Vue--第11天 Vue 3 高级特性
重生之我在学Vue–第11天 Vue 3 高级特性 文章目录 重生之我在学Vue--第11天 Vue 3 高级特性前言一、Teleport:打破组件层级的瞬移术1. 什么是Teleport?2. 核心用法3. 实战技巧 二、Suspense:异步组件的优雅过渡1. 为什么需要Suspense&#x…...
汽车无钥匙启动系统不使用传统机械钥匙启动汽车
汽车无钥匙启动系统 定义 汽车无钥匙启动系统(Keyless Start System),启动车辆时不用掏拧钥匙,只需把钥匙放在包内或口袋里,按下车内按键或拧动导板即可使发动机点火。它无需插入钥匙,通过点按按键或旋转…...
平安养老险深圳分公司积极开展2025年“3·15”金融消费者权益保护教育宣传活动
为深刻把握金融工作的政治性、人民性,帮助社会公众增强维护自身合法权益的意识和能力,平安养老险深圳分公司在2025年3月7日至3月15日期间,以“保障金融权益,助力美好生活”为口号,聚焦“维护权益”主题,全面…...
python 实现 A* 算法
A*算法是一种广泛使用的路径搜索算法,结合了启发式搜索和Dijkstra算法的优点。它通过评估每个节点的代价函数 ( f(n) g(n) h(n) ) 来选择最优路径,其中: ( g(n) ) 是从起点到当前节点的实际代价。( h(n) ) 是从当前节点到目标节点的启发式…...
MyBatis 如何创建 SqlSession 对象的?
MyBatis 创建 SqlSession 对象的过程主要由 SqlSessionFactory 接口及其实现类来完成。以下是详细步骤: 1. SqlSessionFactory 接口: SqlSessionFactory 是 MyBatis 的核心接口之一,它负责创建 SqlSession 对象。 你可以将 SqlSessionFactory 视为 Sql…...
微服务》》四个问题
客户端如何访问 API 网关 如 Core中 Ocelot技术 服务如何治理 服务注册与发现 如 Core中 的 consul技术 服务挂了怎么办 可以利用 重试机制、限流、熔断、降级等 服务之间通信问题 》》同步 1. Http 对外 跨防火墙 【 序列化、反序列化 2 ( 因为http是应用层…...
CockroachDB MCP -cursor适用
CockroachDB MCP 服务器 GitHub仓库置顶 这是一个用于 Cursor 的 CockroachDB MCP 服务器,基于 Model Context Protocol (MCP) 规范实现,可以让你在 Cursor 中直接与 CockroachDB 数据库交互。 功能 连接到 CockroachDB 数据库获取数据库中的所有表获…...
GOC学习
for(int i1;i<5;i){//这里的所有语句都会被执行 5 次 } int main(){pen.a(200,16,1,0).a(200,-16,1,0);pen.rt(16).fd(200).bk(200);pen.lt(32).fd(200).bk(200);///pen.rt(-32).fd(200).bk(200);for(int i1;i<5;i){pen.a(200,16,1,0).a(200,-16,1,0);pen.rt(16).fd(200)…...
【机器学习】基于t-SNE的MNIST数据集可视化探索
一、前言 在机器学习和数据科学领域,高维数据的可视化是一个极具挑战但又至关重要的问题。高维数据难以直观地理解和分析,而有效的可视化方法能够帮助我们发现数据中的潜在结构、模式和关系。本文以经典的MNIST手写数字数据集为例,探讨如何利…...
Vscode工具开发Vue+ts项目时vue文件ts语法报错-红波浪线等
Vscode工具开发Vuets项目时vue文件ts语法报错-红波浪线等 解决方案 问题如题描述,主要原因是开发工具使用的代码检查与项目的中的ts不一致导导致,解决办法,修改 vscode 中, 快捷键:command shift p, 输入ÿ…...
Python在数据处理中的应用:从入门到精通
活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!…...
vue3实现跨页面缓存
避免频繁向后端发送请求,vue3中,可以用缓存机制,为了实现跨页面缓存,可以把缓存放到localsotrage里面 关键代码: const globalCache JSON.parse(localStorage.getItem(globalCache)) || {}; 然后加一个forceRefresh关键字, const fetchData async (forceRefresh false) …...
YOLO优化之多信息融合MIF
设计背景 在目标检测领域,随着深度学习技术的不断进步,研究者们一直在寻求提高模型性能和效率的方法。其中, 多模态数据融合 作为一种有效的策略,近年来受到了广泛关注。多模态融合旨在将来自不同传感器或模态的数据进行整合,以提供更全面、丰富的信息供模型学习和推断。…...
人工智能与人的智能,改变一生的思维模型【8】逆向思维
逆向偏差思维模型:顶尖高手如何「反常识」破局 (斯坦福决策科学中心认证的逆向思考框架) 一、直击本质:什么是逆向偏差思维? 定义: 逆向偏差思维是一种主动对抗本能认知倾向的决策模式,通过系…...
Python 科学计算与机器学习入门:NumPy + Scikit-Learn 实战指南
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
深入理解 Qt 系统托盘图标:创建自定义的系统托盘图标类
文章目录 深入理解 Qt 系统托盘图标:创建自定义的系统托盘图标类1. 什么是 QSystemTrayIcon?2. 自定义系统托盘图标类:SysTraylcon3. 代码解析1. **类的定义**2. **构造函数:SysTraylcon::SysTraylcon(QWidget *parent)**3. **ini…...
DeepSeek-R1 面试 -—— GRPO
DeepSeek训练中应用的GRPO算法,它源自于强化学习领域的PPO算法。GRPO与PPO算法之间存在哪些差异?这两种算法各自的优劣何在?为何DeepSeek选择采用GRPO算法而非PPO算法?本文将对这些问题提供解答。 一、PPO算法 PPO(Pr…...
AI作曲DiffRhythm原理及本地部署
1.原理简介 最近AI在音乐生成方面的进展引起了极大的关注,但现有的方法面临着严重的限制。一些当前的生成模型只能合成人声或伴奏轨道。虽然一些模型可以生成组合的人声和伴奏,但它们通常依赖于精心设计的多阶段级联架构和复杂的数据管道,阻…...
农业电商|基于SprinBoot+vue的农业电商服务系统(源码+数据库+文档)
农业电商服务系统 目录 基于SprinBootvue的农业电商服务系统 一、前言 二、系统设计 三、系统功能设计 5.1系统功能实现 5.2后台模块实现 5.2.1管理员模块实现 5.2.2商家模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码…...
深度学习有哪些算法?
深度学习包含多种算法和模型,广泛应用于图像处理、自然语言处理、语音识别等领域。以下是主要分类及代表性算法: 一、基础神经网络 多层感知机(MLP) 最简单的深度学习模型,由多个全连接层组成,用于分类和回…...