蓝桥刷题--N皇后和最近公共祖先

1.N皇后

#include<iostream>
using namespace std;const int N = 12;
int vis[N][N], n, ans;void dfs(int dep)
{// 在这个搜索中dep表示行,i表示列// 1 搜索出口if(dep == n + 1){ans++;return;}// 2 继续搜索for(int i = 1; i <= n; ++i){// 2.1 排除非法情况if(vis[dep][i])continue;// 2.2 改变状态for(int _i = 1; _i <= n; ++_i)vis[_i][i]++;for(int _i = dep, _j = i; _i >= 1 && _j >= 1; --_i, --_j)vis[_i][_j]++;for(int _i = dep, _j = i; _i <= n && _j >= 1; ++_i, --_j)vis[_i][_j]++;for(int _i = dep, _j = i; _i >= 1 && _j <= n; --_i, ++_j)vis[_i][_j]++;for(int _i = dep, _j = i; _i <= n && _j <= n; ++_i, ++_j)vis[_i][_j]++;// 2.3 下一层dfs(dep + 1);// 2.4 还原现场for(int _i = 1; _i <= n; ++_i)vis[_i][i]--;for(int _i = dep, _j = i; _i >= 1 && _j >= 1; --_i, --_j)vis[_i][_j]--;for(int _i = dep, _j = i; _i <= n &&  _j >= 1; ++_i, --_j)vis[_i][_j]--;for(int _i = dep, _j = i; _i >= 1 && _j <= n; --_i, ++_j)vis[_i][_j]--;for(int _i = dep, _j = i; _i <= n && _j <= n; ++_i, ++_j)vis[_i][_j]--;}
}int main()
{cin >> n;dfs(1);cout << ans << "\n";return 0;
}

2.最近公共祖先LCA查询

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
int n;
vector<int> arr[N]; // 定义一个向量数组 int dep[N], fa[N][24];void dfs(int u, int father) // 预处理 
{dep[u] = dep[father] + 1;fa[u][0] = father;for(int i = 1;i <= 20; ++ i){fa[u][i] = fa[fa[u][i - 1]][i - 1];}for(const auto &x : arr[u])if(x != father) // 只能往下探索 dfs(x, u);
}int lca(int a, int b) // 求 a , b 的最近公共祖先 
{if(dep[a] < dep[b])swap(a, b);// 先跳到同一层for(int i = 20;i >= 0; -- i){if(dep[fa[a][i]] >= dep[b])a = fa[a][i];// 如果 b 是 a 祖先,返回 b if(a == b)return a;} // 再跳到lac的下一层for(int i = 20;i >= 0; -- i){if(fa[a][i] != fa[b][i]){a = fa[a][i];b = fa[b][i];}	} return fa[a][0];
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n;for(int i = 1;i < n; ++ i){int u, v; cin >> u >> v;arr[u].push_back(v);arr[v].push_back(u);}dfs(1, 0);int q; cin >> q; // q 次查询 while(q -- ){int a, b; cin >> a >> b;cout << lca(a, b) << '\n';}
}

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

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

相关文章

副业赚钱秘籍:让空闲时间更有价值

副业&#xff0c;无疑是增加收入、实现财务自由的理想途径&#xff0c;尤其适合那些希望利用闲暇时间创造价值的人群。今天&#xff0c;我为您精选了六种副业赚钱策略&#xff0c;让您轻松拓宽财源。 一、网络营销&#xff1a;通过社交媒体、博客或在线市场&#xff0c;巧妙推…

Linux进程管理:(九)实时调度

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 实时指的是一个特定任务的执行时间必…

分布式商业模式是企业提升新质生产力、重塑生产关系的关键(附分布式商业模式设计六要素)

本文内容摘自思二勋所著的《分布式商业生态战略》一书。 如今&#xff0c;数字化转型如火如荼&#xff0c;数字化给予很多企业和个人网络化、生态化、协同化发展机会。一种基于网络的分布式商业模式或将为企业高效率、低成本开展工作提供新的路径。 数字化技术的成熟带来了万…

火鹰论文工具推荐 #职场发展#知识分享

《火鹰论文工具推荐》 在当今学术界和科研领域&#xff0c;写作是不可或缺的一环。为了保证自己的论文质量&#xff0c;我们经常需要借助一些工具来帮助我们提高效率和质量。其中一款非常好用、靠谱、方便、能用的工具就是火鹰论文。 火鹰论文是一款专业的论文写作工具&#x…

【java数据结构】基于java提供的ArrayList实现的扑克牌游戏-(附源码~)

【Java数据结构】基于java泛型实现的二维数组完成三人扑克游戏 基本框架的实现创建一副牌如何进行洗牌&#xff1a;每个人抓的牌放到哪里&#xff1a; 源码具体实现cardcardsTest 个人简介&#xff1a;努力学编程 每日鸡汤&#xff1a;stay foolish,stay hungry-史蒂芬.乔布斯斯…

深入探索C语言动态内存分配:释放你的程序潜力

&#x1f308;大家好&#xff01;我是Kevin&#xff0c;蠢蠢大一幼崽&#xff0c;很高兴你们可以来阅读我的博客&#xff01; &#x1f31f;我热衷于分享&#x1f58a;学习经验&#xff0c;&#x1f3eb;多彩生活&#xff0c;精彩足球赛事⚽ &#x1f31f;感谢大家的支持&#…

JetBrains数据库驱动下载失败解决方法

本方法可通用于解决PyCharm等JetBrains家的IDE下载数据库驱动问题。 在Jet家IDE内连接数据库时&#xff0c;mysql、sqlite等的驱动有部分在 https://download.jetbrains.com 网站上&#xff0c;可能由于网络问题无法访问。 解决方法是修改 JetBrains 路径下的 jdbc.drivers.xm…

波奇学Linux:网络套接字

domain:ipv4 还是ipv6 type:面向字节流还是... 虚拟机 云服务器禁止直接bind公网ip 服务器可以有多个ip&#xff0c;如果只绑定一个ip&#xff0c;只能收到来自一个ip的信息 任意地址绑定 关于port的问题 [0,1024]&#xff1a;系统内定的端口号&#xff0c;一般要用固定的应…

eth 交易案例分析9

交易hash: 先用0.26eth买入了多个GPT&#xff0c;然后用这多个GPT 在uniswap3 兑换了1.69 个eth&#xff0c; 疑问点&#xff1a;买入的 DLP 什么意思&#xff1f;

YOLO算法改进Backbone系列之:CAT

Transformer广泛应用于NLP后&#xff0c;在CV领域也引起了广泛关注&#xff0c;但是将单词token替换为图像的patch使得Transformer计算量大幅增加。本文提出一种新的注意力机制Cross Attention&#xff0c;不再计算全局注意力而是将注意力的计算局限在patch内部来捕获局部信息&…

米多论文可靠吗 #知识分享#微信

米多论文是一个非常好用、靠谱的论文写作工具&#xff0c;同时也是一个查重降重的工具。它的便捷性和高效性让许多学生和研究者受益匪浅。 首先&#xff0c;米多论文提供了大量的模板和参考资料&#xff0c;为用户提供了丰富的写作素材和参考&#xff0c;能够帮助用户快速完成论…

Linux--Ubuntu安装【保姆级教程】

Linux操作系统时程序员必须要学的操作系统。接下来我们就来看一下Linux操作系统是如何安装的 我们在 Vmware 虚拟机中安装 linux 系统&#xff0c;所以需要先安装 vmware 软件&#xff0c;然后再 安装 Linux 系统。 一.所需安装文件&#xff1a; Vmware 下载地址(现在最新版的…