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";
}
相关推荐
工藤新一¹8 分钟前
蓝桥杯算法题 -蛇形矩阵(方向向量)
c++·算法·矩阵·蓝桥杯·方向向量
Levin__NLP_CV_AIGC12 分钟前
解决pip安装PyPI默认源速度慢
算法·pip
Clockwiseee24 分钟前
文件上传总结
运维·服务器·学习·文件上传
康康这名还挺多30 分钟前
鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
数据结构·list·harmonyos·lazyforeach
Helibo441 小时前
GESPC++六级复习
java·数据结构·算法
苜柠1 小时前
Wpf学习片段
学习
EnticE1521 小时前
[高阶数据结构]二叉树经典面试题
数据结构·算法·面试
欢乐熊嵌入式编程2 小时前
智能手表固件升级 OTA 策略文档初稿
嵌入式硬件·学习·智能手表
fallzzzzz2 小时前
C++ stl中的list的相关函数用法
c++·list
起床学FPGA2 小时前
异步FIFO的学习
学习·fpga开发