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

参考程序1:

cpp 复制代码
#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:

cpp 复制代码
#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";
}
相关推荐
小poop2 小时前
string 类从入门到深入
c++
莫逸雪3 小时前
Nodemo使用学习
学习·编辑器·vim
眠りたいです3 小时前
现代C++:C++14中的新语言特性和库特性
c语言·开发语言·c++
Black蜡笔小新3 小时前
自动化AI算法训练服务器DLTM助力医学影像分析进入AI智能分析新时代
人工智能·算法·自动化
手写码匠4 小时前
深入解析大模型架构之争:全能通用模型 vs 领域专精模型
人工智能·深度学习·算法·aigc
浅念-4 小时前
LeetCode 回溯算法题——综合练习
数据结构·c++·算法·leetcode·职场和发展·深度优先·dfs
列星随旋5 小时前
线段树和树状数组的学习
学习·算法
楼田莉子6 小时前
C++17新特性:__had_include/属性/求值顺序规则
开发语言·c++·后端
辰海Coding6 小时前
MiniSpring框架学习-整合 IoC 和 MVC(NPC)
学习·spring·mvc