这道题属于是那种看上去很有思路,然后无从下手,写了个dfs感觉实在是不行。

后面仔细看了一下,这个题是用的构造dfs,基本是树上dfs,时间复杂度是O(V+E)

新构造的一个参数作为根,整个dfs表示这个根的子树已经全部变为黑色(除了根以外)

刚开始是一直搜,搜到最后如果是粉的,递归以后再单独处理一次

其实当时如果能想到直接从每个结点的根结点入手,这个题应该就不在话下了

只能说写着写着心乱了

#include<iostream>
#include<utility>
#include<vector>
using namespace std;
typedef long long ll;
#define fi(i,a,b) for(int i = a; i <= b; ++i)
#define fr(i,a,b) for(int i = a; i >= b; --i)
#define x first
#define y second
#define sz(x) ((int)(x).size())
#define pb push_back
using pii = pair<int,int>;
//#define DEBUG
#define int long long
const int N = 2e5 + 5;
vector<int> tre[N];
int vex[N];
void dfs(int x,int y){
fi(i,0,sz(tre[x])-1){
int v = tre[x][i];
if(v == y) continue;
vex[v] ^= 1;
cout << v << " ";
dfs(v,x);
cout << x << " ";
vex[x] ^= 1;
if(vex[v] == 0)
cout << v << " " << x << " ",vex[v] ^=1 ,vex[x] ^= 1;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
fi(i,1,n) cin >> vex[i],vex[i] = max(vex[i],(ll)0);
fi(i,1,n-1){
int a,b;
cin >> a >> b;
tre[a].pb(b);
tre[b].pb(a);
}
cout << 1 << " ";
dfs(1,0);
if(vex[1] == 0)
cout << tre[1][0] << " " << 1 << " " << tre[1][0];
#ifdef DEBUG
//freopen(D:\in.txt,r,stdin);
#endif
return 0;
}

随机推荐

  1. vue3创建工程

    创建 Vue3 项目的步骤如下: 安装 Node.js Vue3 需要依赖 Node.js 环境,因此需要先安装 Node.js.可以从官网下载 Node.js 的安装包并安装,也可以使用包管理器安装 ...

  2. C语言:头文件ctype.h的内置函数

    #include <stdio.h> #include <ctype.h>//内置函数的头文件 #include <math.h> int main() { int ...

  3. PyQt5自定义信号

    一.简介 在 PyQt5 中,自定义信号是一个常见的任务,通常用于在对象之间传递信息或触发特定行为.自定义信号需要继承自 QtCore.pyqtSignal 并定义其参数类型. 二.操作步骤 1.导入 ...

  4. anaconda3部署以及使用详解

    Anaconda3-2019.10-Linux-x86_64.sh 某次执行Python程序,其中两个错误信息如下: ImportError: libcblas.so.3: cannot open s ...

  5. HC32L110(六) AS06-VTB07H V5.0测试板AT指令固件

    目录 HC32L110(一) HC32L110芯片介绍和Win10下的烧录 HC32L110(二) HC32L110在Ubuntu下的烧录 HC32L110(三) HC32L110的GCC工具链和VS ...

  6. 到今天了你还不会集合的Stream操作吗?你要out了

    Java8的两个重大改变,一个是Lambda表达式,另一个就是本节要讲的Stream API表达式.Stream 是Java8中处理集合的关键抽象概念,它可以对集合进行非常复杂的查找.过滤.筛选等操作 ...

  7. Vue——Ajax请求的基本使用

    1.get方法发送Ajax请求 // 直接在 URL 上添加参数 ID=12345 axios.get('/user?ID=12345') .then(function (response) { co ...

  8. docker创建容器数据持久化资源限制基础命令

    1. docker简介和核心概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使 ...

  9. nginx37条优化

    nginx优化: 1. cpu:核心配置 方法1: worker_processes auto; 自动调用[推荐] 方法2: worker_processes 4; 手工配置 检查CPU核心:yum ...

  10. Fluter 编译第一个iOS应用

    一.流程说明 1)fluter是一个跨平台UI库,可以一份界面代码在iOS和Android上面运行 2)在Mac上面安装Fluter的环境,相对比较简单,通过简单的命令行可以设置环境 3)可以使用特定 ...