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

湛江免费做网站百度客服在线咨询人工服务

湛江免费做网站,百度客服在线咨询人工服务,西安网站开发公司,加强网站建设 通知题目描述 假设村落以二叉树的形状分布,我们需要选择在哪些村落建设基站。如果某个村落建设了基站,那么它和它相邻的村落(包括本节点、父节点和子节点)也会有信号覆盖。目标是计算出最少需要建设的基站数。 输入描述 输入为一个…

题目描述

假设村落以二叉树的形状分布,我们需要选择在哪些村落建设基站。如果某个村落建设了基站,那么它和它相邻的村落(包括本节点、父节点和子节点)也会有信号覆盖。目标是计算出最少需要建设的基站数。

输入描述

输入为一个完全二叉树的数组形式表示,从左到右、从上到下遍历。每个元素为 10,其中:

  • 1 表示节点存在。
  • 0 表示节点不存在。

节点数范围为 (1 < 节点数 < 8191)。

输出描述

输出为最少需要建设的基站数。

用例输入

输入:

1 1 1 1 0 1 1

输出:

2

说明:最少需要 2 个基站才能覆盖所有村落。

输入:

1 1 0 1 0 0 0

输出:

1

说明:只需要 1 个基站就能覆盖所有村落。

解题思路

  1. 构建二叉树

    • 使用数组表示的完全二叉树,通过递归构建二叉树结构。
    • 如果当前节点不存在(值为 0),则返回 nullptr
  2. 动态规划(DFS)

    • 使用深度优先搜索(DFS)遍历二叉树,为每个节点计算三种状态:
      1. 在当前节点安装基站:子节点可以处于任何状态,因为当前节点的基站已经覆盖了本节点。
      2. 不在当前节点安装基站,依赖父节点的基站覆盖:子节点必须自己安装基站或依赖其子节点的基站覆盖。因为本节点不安装基站。
      3. 不在当前节点安装基站,依赖子节点的基站覆盖:至少有一个子节点必须安装基站,另一个子节点只能自己安装或者依赖他的子节点。
    • 对于每个节点,计算这三种状态的最小基站数,并返回结果。
  3. 结果计算

    • 根节点的最小基站数为在当前节点安装基站或依赖子节点安装基站的最小值。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <algorithm>
#include <string>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <set>
#include <list>
#include <sstream>
#include <bitset>
#include <stack>
#include <climits>
#include <iomanip>
#include <cstdint>
using namespace std;vector<int> tree; // 存储输入的二叉树数组struct node {int index; // 节点索引node* left; // 左子节点node* right; // 右子节点
};// 构建二叉树
node* build(int root) {if (root >= tree.size() || tree[root] == 0) return nullptr; // 如果节点不存在,返回nullptrnode* l = build(2 * root + 1); // 构建左子树node* r = build(2 * root + 2); // 构建右子树node* cur = new node; // 创建当前节点cur->index = root;cur->left = l;cur->right = r;return cur;
}// 深度优先搜索,计算每个节点的三种状态
vector<int> dfs(node* root) {if (root == nullptr) {return { INT_MAX / 2, 0, 0 }; // 非法节点,默认被覆盖}vector<int> l_dp = dfs(root->left); // 左子树的三种状态vector<int> r_dp = dfs(root->right); // 右子树的三种状态// 状态1:在当前节点安装基站// 子节点可以处于任何状态,因为当前节点的基站已经覆盖了它们int dp0 = *min_element(l_dp.begin(), l_dp.end()) + *min_element(r_dp.begin(), r_dp.end()) + 1;// 状态2:不在当前节点安装基站,依赖父节点的基站覆盖// 子节点必须自己安装基站或依赖其子节点的基站覆盖int dp1 = l_dp[2] + r_dp[2];// 状态3:不在当前节点安装基站,依赖子节点的基站覆盖// 至少有一个子节点必须安装基站int dp2 = min(l_dp[0] + min(r_dp[0], r_dp[2]),r_dp[0] + min(l_dp[0], l_dp[2]));return { dp0, dp1, dp2 };
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);string input;getline(cin, input); // 读取输入istringstream is(input);int num;while (is >> num) {tree.push_back(num); // 存储二叉树数组}node* root = build(0); // 构建二叉树vector<int> res = dfs(root); // 计算最小基站数cout << min(res[0], res[2]); // 输出结果return 0;
}
http://www.dtcms.com/wzjs/47559.html

相关文章:

  • 深圳网站建设简介网络营销工具及其特点
  • 中山网站建设怎么样营销型网站和普通网站
  • 天津搜索引擎优化网站优化公司收费
  • 合肥房产网签备案查询湖南专业的关键词优化
  • 网站 二次开发怎么做百度运营平台
  • 做收费类网站站长公司网站推广技巧
  • 福州市网站建设有限公司如何做网站seo排名优化
  • 西宁高端网站制作公司怎么给公司做网站推广
  • 自适应网站欣赏口碑营销成功案例有哪些
  • 全国的p2p网站建设seo查询
  • 网站全屏轮播怎么做app推广接单
  • 政府网站建设经费预算方案品牌营销推广方案怎么做
  • 营销型网站用什么系统谷歌搜索引擎入口google
  • 临沂网站建设goldball怎么做手工
  • 安徽网站推广营销设计厦门人才网招聘官网
  • 通过招聘网站如何做背景调查河南seo排名
  • 长沙seo工作室广告优化
  • 南京做中英文网站设计近期网络营销的热点事件
  • 网站建设技术咨询协议百度网站打不开
  • 个人房屋做民宿在哪个网站外贸推广方式
  • 爱ppt网站国内专业的seo机构
  • 代理游戏一年能赚多少小红书seo关键词优化多少钱
  • 个人网站空间收费营销型网站建设的5大技巧
  • b2c电子商务网站规划说明书余姚网站如何进行优化
  • 深圳松岗做网站游戏代理加盟平台
  • 兰州做网站南昌seo计费管理
  • 大宗商品交易软件哪个好seo站长工具推广平台
  • 怎么做网站倒计时软文模板300字
  • 巩义网站建设案例课堂今日热点新闻头条排行榜
  • 郑州网站排建站网站