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";
}
相关推荐
感哥5 小时前
C++ 多态
c++
沐怡旸12 小时前
【底层机制】std::string 解决的痛点?是什么?怎么实现的?怎么正确用?
c++·面试
NAGNIP13 小时前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队14 小时前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
River41615 小时前
Javer 学 c++(十三):引用篇
c++·后端
感哥18 小时前
C++ std::set
c++
Fanxt_Ja19 小时前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下19 小时前
最终的信号类
开发语言·c++·算法
茉莉玫瑰花茶19 小时前
算法 --- 字符串
算法
博笙困了19 小时前
AcWing学习——差分
c++·算法