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

GESP2024年6月认证C++六级( 第三部分编程题(2)二叉树)

参考程序1:

#include <iostream>
#include <vector>
using namespace std;

void dfs(int node, const vector<vector<int>>& tree, vector<int>& colors, vector<int>& flip_count, int flip) {
    // 反转当前节点的颜色
    flip ^= flip_count[node];
    colors[node] = (colors[node] + flip) % 2;

    // 遍历当前节点的所有子节点
    for (int child : tree[node]) {
        dfs(child, tree, colors, flip_count, flip);
    }
}

int main() {
    int n;
    cin >> n;

    // 构建树
    vector<vector<int>> tree(n);
    vector<int> parent(n, -1); // parent[i] 存储节点i的父节点
    for (int i = 1; i < n; ++i) {
        int p;
        cin >> p;
        parent[i] = p - 1; // -1是因为题目中的节点编号从1开始,C++数组从0开始
        tree[p - 1].push_back(i);
    }

    // 读取节点颜色信息
    string colors_str;
    cin >> colors_str;
    vector<int> colors(n);
    for (int i = 0; i < n; ++i) {
        colors[i] = colors_str[i] - '0';
    }

    // 读取操作次数
    int q;
    cin >> q;
    
    // 记录反转操作的次数
    vector<int> flip_count(n, 0);
    for (int i = 0; i < q; ++i) {
        int a;
        cin >> a;
        flip_count[a - 1] ^= 1; // 标记节点a的颜色需要反转
    }

    // 初始化 DFS 过程
    dfs(0, tree, colors, flip_count, 0);

    // 输出最终的节点颜色
    for (int i = 0; i < n; ++i) {
        cout << colors[i];
    }
    cout << endl;

    return 0;
}

参考程序2:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n;
int son[N][2];
int f[N],col[N],sum[N];
void dfs(int x,int now)
{
	now+=sum[x];
	if(now&1)col[x]^=1;
	for(int i=0;i<2;i++)
	{
		if(son[x][i]!=-1)
			dfs(son[x][i],now);
	}
}
int main()
{
	cin>>n;
	memset(son,-1,sizeof son);
	for(int i=2;i<=n;i++)
	{
		cin>>f[i];
		for(int j=0;j<2;j++)
		{
			if(son[f[i]][j]==-1)
			{
				son[f[i]][j]=i;
				break;
			}
		}
	}
	string s;
	cin>>s;
	for(int i=1;i<=n;i++)
	{
		col[i]=s[i-1]-'0';
	}
	int q;
	cin>>q;
	while(q--)
	{
		int x;
		cin>>x;
		sum[x]+=1;
	}
	dfs(1,0);
	for(int i=1;i<=n;i++)
	{
		cout<<col[i];
	}
	cout<<"\n";
}


http://www.kler.cn/a/517423.html

相关文章:

  • 改进候鸟优化算法之二:基于混沌映射的候鸟优化算法(MBO-CM)
  • 寒假1.23
  • YOLOv5模型版本详解:n/s/m/l的区别与选型指南
  • 笔记 — Typescript 类型定义
  • 【贪心算法】洛谷P1090 合并果子 / [USACO06NOV] Fence Repair G
  • macos的图标过大,这是因为有自己的设计规范
  • react native i18n插值:跨组件trans
  • 麒麟操作系统基础知识保姆级教程(二十一)进入单用户模式
  • UE5 特效
  • 面试-二维数组
  • Oracle 创建用户和表空间
  • 第15章 监控任务的生命周期(Java高并发编程详解:多线程与系统设计)
  • Servlet 详解
  • EMC常用器件选型(一)
  • 提示词的艺术 ---- AI Prompt 进阶(提示词框架)
  • 三、双链表
  • 算法基础 -- Trie压缩树原理
  • 浏览器hid 和蓝牙bluetooth技术区别
  • WPF 打印功能实现
  • LPDDR4 precharge和selfresh 详解
  • .NET9增强OpenAPI规范,不再内置swagger
  • 经典卷积网络算法-VGG16
  • SpringAI基于Ollama调用通义千问
  • Web3 的核心理念:去中心化如何重塑互联网
  • 不只是mini-react第二节:实现最简fiber
  • 状态模式