Paint it really, really dark gray

CodeForces - 717E

题意 有一棵树 每个结点是粉色或黑色 每经过一个结点 就改变他的颜色

从1开始遍历 打印出一条路径 让所有结点都变成黑色

思路就是 每到达一个结点 就改变它的颜色 打印这个结点

然后看它的叶子结点

如果没有叶子结点 自然就返回了

有叶子结点的话 那么递归遍历 把子树里面的颜色都变成黑

返回的时候 如果该叶子节点是粉色 就可以再一次访问该叶子节点 再返回

其实这是很浪费时间的 但是题目说只要打印出来的路径符合就好 我们自己看一棵树很容易看出子树里面存不存在粉色

但是程序就得递归遍历全看一遍了 或者可以预处理dfs一遍 再输出完美答案dfs一遍

但是好像更浪费时间hhh(我在说什么

还有一个细节 因为递归处理都是先改变这个结点的颜色 再去访问叶子节点 但是刚开始从1出发是不会改变1的颜色的

就得特判一下 如果全部处理完之后 1是黑色 那么原来就是粉色 就可以访问叶子 访问自己 再访问叶子 就可以了

代码如下

#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = 2e5 + ;
vector<int> G[maxn];
int color[maxn];
int ans[maxn];
int cnt; inline void fun(int u) { color[u] ^= ; printf("%d ", u); }
void dfs(int u, int fa) {
fun(u);
for (int i = ; i < G[u].size(); i++) {
int v = G[u][i];
if (v == fa) continue;
dfs(v, u);
fun(u);
if (color[v]) fun(v), fun(u);
}
if (u == && !color[u]) fun(G[u][]), fun(u), fun(G[u][]);
} int main() {
int n;
scanf("%d", &n);
for (int i = , x; i <= n; i++) {
scanf("%d", &x);
if (x == -) color[i] = ;
else color[i] = ;
}
for (int i = , x, y; i < n; i++) {
scanf("%d%d", &x, &y);
G[x].push_back(y);
G[y].push_back(x);
}
dfs(, );
puts("");
return ;
}

Paint it really, really dark gray CodeForces - 717E的更多相关文章

  1. 「CodeForces - 717E」Paint it really, really dark gray (dfs)

    BUPT 2017 summer training (for 16) #1H 题意 每个节点是黑色or白色,经过一个节点就会改变它的颜色,一开始在1节点.求一条路径使得所有点变成黑色. 题解 dfs时 ...

  2. 树&图 记录

    A - Lake Counting POJ - 2386 最最最最最基础的dfs 挂这道题为了提高AC率(糖水不等式 B - Paint it really, really dark gray Cod ...

  3. bupt summer training for 16 #1 ——简单题目

    D.What a Mess 给n个数,求其中能满足 a[i] % a[j] == 0 的数对之和 n = 1W,max_ai = 100W 不是很大,所以就直接筛就可以了 计算可得最高复杂度 < ...

  4. PS网页设计教程XXIV——从头设计一个漂亮的网站

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  5. Devexpress VCL Build v2013 vol 13.2.2 发布

    devexpress 2013 的第二个大版本出来了,一如既往, 基本上还是一个大补丁包.各位看官,自己看. What's New in 13.2.2 (VCL Product Line)   New ...

  6. DevExpress Skins<2>

    Skins DevExpress WinForms控件包括许多现成的绘画主题(或外观),用于更改DevExpress表单和控件的外观.您可以通过运行WinForms演示应用程序并使用外观选择器在可用主 ...

  7. 用python读写excel(xlrd、xlwt)

    最近需要从多个excel表里面用各种方式整理一些数据,虽然说原来用过java做这类事情,但是由于最近在学python,所以当然就决定用python尝试一下了.发现python果然简洁很多.这里简单记录 ...

  8. 关于ArcGIS API for JavaScript中basemap的总结介绍(一)

    实际上basemap这个概念并不只在arcgis中才有,在Python中有一个matplotlib basemap toolkit(https://pypi.python.org/pypi/basem ...

  9. 使用Python对Excel表格进行简单的读写操作(xlrd/xlwt)

    算是一个小技巧吧,只是进行一些简单的读写操作.让人不爽的是xlrd和xlwt是相对独立的,两个模块的对象不能通用,读写无法连贯操作,只能单独读.单独写,尚不知道如何解决. #①xlrd(读) #cod ...

随机推荐

  1. 深入理解 Node.js 中 EventEmitter源码分析(3.0.0版本)

    events模块对外提供了一个 EventEmitter 对象,即:events.EventEmitter. EventEmitter 是NodeJS的核心模块events中的类,用于对NodeJS中 ...

  2. Clustering[Evaluation]

    0. 背景 评估(或者说验证)聚类结果就如同聚类本身一样困难.通常的方法有内部评估和外部评估这两种: 内部评估的方法:通过一个单一的量化得分来评估算法好坏:该类型的方法 外部评估的方法:通过将聚类结果 ...

  3. maven下载及安装

    一.下载及安装 1.1 下载maven 3.1.1 先到官网http://maven.apache.org/download.cgi 下载最新版本(目前是3.1.1 ),下载完成后,解压到某个目录,本 ...

  4. List,DataTable实现行转列的通用方案

    最近在做报表统计方面的需求,涉及到行转列报表.根据以往经验使用SQL可以比较容易完成,这次决定挑战一下直接通过代码方式完成行转列.期间遇到几个问题和用到的新知识这里整理记录一下. 阅读目录 问题介绍 ...

  5. Ubuntu Desktop: 备份与还原

    Ubuntu Desktop 版本默认自带了图形化的备份/还原工具 Déjà Dup.该工具主要用来备份和还原用户的数据,当然我们也可以用它来备份/还原系统的数据.本文主要介绍 Déjà Dup 的主 ...

  6. CONTINUE...?模拟分情况

    CONTINUE...? DreamGrid has  classmates numbered from  to . Some of them are boys and the others are ...

  7. 2017湘潭大学邀请赛G题(贪心+优先队列)

    参考博客:http://www.cnblogs.com/chendl111/p/6891770.html 题目链接:https://www.icpc.camp/contests/4mYguiUR8k0 ...

  8. 1171: lfx捧杯稳啦!

    escription Lfx在复习离散的时候突然想到了一个算法题,毕竟是lfx, 算法题如下: 他想知道这样的问题,先定义1~n中即是3的倍数,又是11的倍数的那些数的和sum, 他想知道sum有多少 ...

  9. ImageProcessor组件

    ImageProcessor组件 开源免费的.NET图像即时处理的组件ImageProcessor   承接以前的组件系列,这个组件系列旨在介绍.NET相关的组件,让大家可以在项目中有一个更好的选择, ...

  10. 多线程系列之五:Balking 模式

    一,什么是Balking模式 如果现在不合适执行这个操作,或者没必要执行这个操作,就停止处理,直接返回.在Balking模式中,如果守护条件不成立,就立即中断处理. 二,例子: 定期将当前数据内容写入 ...