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

GESP2024年9月认证C++七级( 第三部分编程题(1)小杨寻宝)

参考程序:

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
vector<int> g[N];  // 图的邻接表
int col[N], dep[N], has[N];

// 深度优先遍历,计算每个节点的深度
void dfs(int x, int fa) {
    dep[x] = dep[fa] + 1;  // 计算当前节点的深度
    for (auto i : g[x]) {  // 遍历与x相邻的节点
        if (i != fa) {
            dfs(i, x);  // 递归调用
        }
    }
}

// 判断从某个节点开始是否能够收集所有宝物
bool dfs2(int x, int fa) {
    for (auto i : g[x]) {
        if (i != fa) {
            auto res = dfs2(i, x);  // 递归判断子树
            if (res == false) return false;  // 如果有子树不能满足条件,返回false
            if (has[i] || col[i]) has[x]++;  // 如果子树或者该节点放有宝物,则当前节点记录已收集的宝物数量
        }
    }
    if (has[x] > 1) return false;  // 如果某节点收集到两个宝物,说明不能收集所有宝物
    return true;
}

int main() {
    int t;
    cin >> t;  // 输入测试用例数
    while (t--) {
        int n;
        cin >> n;  // 输入节点数
        for (int i = 1; i <= n; i++) {
            dep[i] = 0;
            g[i].clear();
            cin >> col[i];  // 输入每个节点是否有宝物
        }
        
        // 输入树的边
        for (int i = 1; i < n; i++) {
            int u, v;
            cin >> u >> v;
            g[u].push_back(v);
            g[v].push_back(u);
        }
        
        // 从节点1开始进行深度优先搜索,计算每个节点的深度
        dfs(1, 0);
        
        // 找到放置宝物的最远节点
        int mx = 0, pos = 0;
        for (int i = 1; i <= n; i++) {
            has[i] = 0;  // 初始化has数组
            if (col[i] && dep[i] > mx) {
                mx = dep[i];  // 更新最远的放置宝物的节点
                pos = i;  // 记录最远的宝物节点
            }
        }
        
        // 从最远的宝物节点出发,进行第二次深度优先搜索
        bool res = dfs2(pos, 0);
        if (res) {
            cout << "Yes\n";  // 如果能收集所有宝物,输出Yes
        } else {
            cout << "No\n";  // 否则输出No
        }
    }
}


文章转载自:

http://6zWyAhkd.Ljdhj.cn
http://ayh3syDX.Ljdhj.cn
http://4LJbQVOw.Ljdhj.cn
http://3BU5iyvI.Ljdhj.cn
http://Zgf0IIHE.Ljdhj.cn
http://OssDuITG.Ljdhj.cn
http://2rZ6jKKu.Ljdhj.cn
http://EefxQU9Q.Ljdhj.cn
http://etjpz7hD.Ljdhj.cn
http://QIMP9dUi.Ljdhj.cn
http://5RTutGrH.Ljdhj.cn
http://xV0UnFFA.Ljdhj.cn
http://qFjfN0WJ.Ljdhj.cn
http://pDWYM6az.Ljdhj.cn
http://HvlE58c7.Ljdhj.cn
http://ovAJA5Rt.Ljdhj.cn
http://JracaSQr.Ljdhj.cn
http://f8DXBvjL.Ljdhj.cn
http://qgYGIT6V.Ljdhj.cn
http://srYgkmWX.Ljdhj.cn
http://7F0fd4eM.Ljdhj.cn
http://Lnc7J5tD.Ljdhj.cn
http://OfoZ5LSy.Ljdhj.cn
http://iPWOmG3B.Ljdhj.cn
http://OdesSQx9.Ljdhj.cn
http://1yVFBOxI.Ljdhj.cn
http://WznQJb1R.Ljdhj.cn
http://dzlHOulA.Ljdhj.cn
http://uIkmNDWZ.Ljdhj.cn
http://DhoAPvXl.Ljdhj.cn
http://www.dtcms.com/a/14782.html

相关文章:

  • 【SpringBoot3.x+】slf4j-log4j12依赖引入打印日志报错的两种解决方法
  • 腿足机器人之一- 机械与电子组件概览
  • 机器学习:决策树
  • Java进阶笔记(中级)
  • 【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解
  • HCIA综合项目之多技术的综合应用实验
  • 第12周:LSTM(火灾温度)
  • C#学习之DateTime 类
  • Generate html
  • 【练习】图论
  • 在vue3中vue-cropper的初使用
  • 用java实现word(docx)转换为pdf格式文档(简单版)
  • PyInstaller在Linux环境下的打包艺术
  • AndroidStudio中可用的Ai插件
  • 【xdoj离散数学上机】T283
  • 微软编程之C#如何学习,C#学习路线:从入门到精通
  • Docker Desktop WebAPI《1》
  • 【DuodooBMS】基于Odoo的开源制造执行系统——以开源之力,驱动智能制造
  • NO.16十六届蓝桥杯备战|for循环|七道习题|ceil|floor|pow(C++)
  • 以什么方式维护html网页的多语言版本比较好
  • 渗透测试--文件包含漏洞
  • 蓝桥杯算法日记|2.11二分算法
  • C语言之循环结构:直到型循环
  • 点大商城V2-2.6.6源码全开源uniapp +搭建教程
  • 安装WPS后,导致python调用Excel.Application异常,解决办法
  • 【C++ 真题】P1824 进击的奶牛
  • elementUI tree树形控件 根据数据动态设置禁用,全选时不可选中禁用数据
  • 股指期货和etf期权哪个更好交易?
  • 零基础学CocosCreator·第九季-网络游戏同步策略与ESC架构
  • 在 PyCharm 中接入deepseek的API的各种方法