跪烂数竞大爷orz

证明一个命题: 
if(a,b)=1,then xN and x>abab,都能表示成x=pa+qb(p,qN) 
说真的感觉在哪里见过这个结论但是又想不起来了…… 
我们来简单证明一下: 
贝祖定理: 
x,yZ,ax+by=1 
 nZ,p=nx,q=ny s.t. pa+qb=n 
注意到,p可以用减掉一个b的代价使得q加上a。 
注意到,p可以用加上一个b的代价使得q减去a。 
则可设p[0,b) 
则有n>abab时,设p[0,b) 
使用反证法: 
q<0则有: 
n=pa+qb<=a(b1)+(1)b 
n<=abab. 
矛盾。 
n>abab
内容概要:本文介绍了ENVI Deep Learning V1.0的操作教程,重点讲解了如何利用ENVI软件进行深度学习模型的训练与应用,以实现遥感图像中特定目标(如集装箱)的自动提取。教程涵盖了从据准备、标签图像创建、模型初始化与训练,到执行分类及结果优化的完整流程,并介绍了精度评价与通过ENVI Modeler实现一键化建模的方法。系统基于TensorFlow框架,采用ENVINet5(U-Net变体)架构,支持通过点、线、面ROI或分类图生成标签据,适用于多/高光谱影像的单一类别特征提取。; 适合人群:具备遥感图像处理基础,熟悉ENVI软件操作,从事地理信息、测绘、环境监测等相关领域的技术人员或研究人员,尤其是希望将深度学习技术应用于遥感目标识别的初学者与实践者。; 使用场景及目标:①在遥感影像中自动识别和提取特定地物目标(如车辆、建筑、道路、集装箱等);②掌握ENVI环境下深度学习模型的训练流程与关键参设置(如Patch Size、Epochs、Class Weight等);③通过模型调优与结果反馈提升分类精度,实现高效自动化信息提取。; 阅读建议:建议结合实际遥感项目边学边练,重点关注标签据制作、模型参配置与结果后处理环节,充分利用ENVI Modeler进行自动化建模与参优化,同时注意软硬件环境(特别是NVIDIA GPU)的配置要求以保障训练效率。
你提到“**应该输出 orz**”,说明我们正在处理的是 **洛谷 P3366 【模板】最小生成树** 这类题目。 在该题中: > 如果图不连通(无法生成最小生成树),则输出 `orz`。 而你在之前的代码中虽然修复了大部分逻辑,但在某些情况下仍可能 **错误地输出答案而不是 `orz`**。下面我们来彻底解释:**何时应输出 `orz`?如何正确判断?** --- ## ✅ 什么时候输出 `orz`? 当且仅当: > 图中的节点无法通过选边构成一棵包含所有 $ N $ 个顶点的树 也就是:**最小生成树的边不足 $ N - 1 $ 条** 👉 所以我们需要统计成功合并的边 `cnt`,最后判断是否 `cnt == n - 1` 如果不是 → 输出 `orz` --- ## ❌ 常见错误写法导致“本该输出 orz 却没输出” 比如下面这段逻辑就有问题: ```cpp int cnt = 0; for (int i = 0; i < m; ++i) { int u = e[i].from, v = e[i].to; int pu = find(u), pv = find(v); if (pu != pv) { pre[pu] = pv; ans += e[i].w; cnt++; // 没有 break 或最终检查 } } // 忘记判断 cnt 是否等于 n-1 cout << ans << endl; // 错!图可能不连通 ``` 即使图是断开的(如两个孤立点),也会输出一个部分和 → ❌ --- ## ✅ 正确做法:必须判断最终 `cnt == n - 1` ### ✔️ AC 风格完整代码(保证能输出 `orz`) ```cpp #include <bits/stdc++.h> using namespace std; const int MAXN = 200000 + 10; int n, m; int pre[MAXN]; struct Edge { int from, to, w; bool operator<(const Edge& other) const { return w < other.w; } } e[MAXN]; int find(int x) { return pre[x] == x ? x : pre[x] = find(pre[x]); } void Kruskal() { sort(e, e + m); for (int i = 1; i <= n; ++i) pre[i] = i; long long ans = 0; int cnt = 0; // 已选边量 for (int i = 0; i < m; ++i) { int u = e[i].from, v = e[i].to, w = e[i].w; int pu = find(u), pv = find(v); if (pu != pv) { pre[pu] = pv; ans += w; cnt++; if (cnt == n - 1) break; // 提前结束 } } // 判断是否形成了一棵完整的生成树 if (cnt == n - 1) { cout << ans << '\n'; } else { cout << "orz\n"; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; for (int i = 0; i < m; ++i) { cin >> e[i].from >> e[i].to >> e[i].w; } Kruskal(); return 0; } ``` --- ## 🧪 测试案例:应该输出 `orz` ### 输入: ``` 3 1 1 2 5 ``` - 只有 1 条边,连接了 1 和 2 - 节点 3 完全孤立 - 无法构造包含 3 个节点的生成树 ✅ 正确输出: ``` orz ``` 因为 `cnt = 1`,但需要 `n-1 = 2` 条边 → 不足 → 输出 `orz` --- ## 🔍 如何验证你的代码能否正确输出 `orz`? 你可以用以下测试据验证: ### Case 1: 不连通图 → orz ``` 4 2 1 2 10 3 4 20 ``` → 两个独立边,无法连通全部 4 个点 → 输出 `orz` ### Case 2: 连通图 → 输出总权值 ``` 4 3 1 2 1 2 3 2 3 4 3 ``` → 形成链状连通图,共 3 条边(=4-1)→ 输出 `6` --- ## ✅ 总结:确保输出 `orz` 的关键点 | 条件 | 是否满足 | |------|---------| | ✅ 使用变量 `cnt` 记录实际加入 MST 的边 | ✔️ | | ✅ 循环结束后判断 `if (cnt != n - 1)` | ✔️ | | ✅ 在不满足时输出 `"orz"` 而非任何字 | ✔️ | | ✅ 并查集初始化正确(从 1 到 n) | ✔️ | ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值