code#5 P4 逻辑树
逻辑树
时间限制: 3.0 秒
空间限制: 512 MB
相关文件: 题目目录
题目描述
有一棵树,叫逻辑树。
这个树有根,有 2N−1 个节点,其中 N 个叶子,每个非叶节点恰好有两个孩子。
每个叶子上有一个 01 变量,它的取值可能为 True 或 False。每个非叶节点上有一个逻辑运算符,这个运算可能为 AND 或者 OR。
一个非叶节点的取值定义为它两个儿子的取值,作这个节点上的运算得到的结果。
有一个黑恶势力想知道这个树的根节点的取值,他准备了一个长度为 N 的询问序列 {Pi},每个叶子在这个序列中恰好出现一次。
黑恶势力会依次询问这些叶子的值,但是,如果他发现某一次询问是不必要的,那么他会跳过这个无意义的询问(为了帮助理解,考虑 x AND y 在我们知道 x 为 False 之后,不必知道 y 的值就可推算 x AND y 的值)。
当然,邪恶总是能战胜正义,黑恶势力总能达到他的目的。但是我们可以拖慢他的节奏,你现在可以安排每个叶子的权值,使得黑恶势力询问的次数尽可能多,在此基础上,我们希望这个树的根节点取值尽量为 True。
请你计算一组解,任何一种合法方案都是可以接受的。
输入格式
从标准输入读入数据。
第一行一个整数 N,意义如题面所示。
接下来一行 N−1 个整数,第 i 个数代表节点 N+i 上的运算符,其中 0 表示 AND,1 表示 OR。
接下来 2N−2 行,每行两个整数u,v,描述一条u,v之间的边。
最后一行 N 个整数,表示黑恶势力的询问序列。
你可以认为 1∼N 是叶子,N+1∼2N−1 是非叶节点,且 N+1 是根,输入数据保证每个非叶节点有两个孩子。
输出格式
输出到标准输出。
输出一个长度为 N 的 01串 S,其中 Si 表示第 i 个叶子的取值,0 为 False, 1 为 True.
思路:
显然这是一个特殊地树形DP
我们首先将树上每个节点的儿子都处理出来
然后从根节点跑第一遍DFS
然后我们就可以通过询问的次序,处理出这个点被查到的先后
当然为了尽可能不让黑帮老大猜到,我们会按位运算的种类分配
父亲的值知道,当且仅当在构造情况下两个儿子的值都知道
(我们针对位运算进行构造,与知道有0就是0,或知道有1就是1,要避免)
这时候知道父亲的时刻就是两个儿子中后知道值的那个的时刻
在顺序确定好后我们跑第二遍DFS
即可确定值
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rii register int i
#define rij register int j
using namespace std;
int head[],cnt,n;
struct edge{
int cnt,bj,s[],val,bh;
}x[];
struct ljb{
int to,nxt;
}y[];
inline void add(int from,int to)
{
cnt++;
y[cnt].nxt=head[from];
y[cnt].to=to;
head[from]=cnt;
}
void ycl(int wz,int fa)
{
for(rii=head[wz];i;i=y[i].nxt)
{
int to=y[i].to;
if(to==fa)
{
continue;
}
x[wz].s[x[wz].cnt]=to;
x[wz].cnt++;
ycl(to,wz);
}
return;
}
void dfs(int wz)
{
if(wz<=n)
{
return;
}
dfs(x[wz].s[]);
dfs(x[wz].s[]);
if(x[x[wz].s[]].bh>x[x[wz].s[]].bh)
{
swap(x[wz].s[],x[wz].s[]);
}
x[wz].bh=x[x[wz].s[]].bh;
return;
}
void dfs2(int wz)
{
if(wz<=n)
{
return;
}
if(x[wz].bj==)
{
if(x[wz].val==)
{
x[x[wz].s[]].val=;
x[x[wz].s[]].val=;
}
else
{
x[x[wz].s[]].val=;
x[x[wz].s[]].val=;
}
}
else
{
if(x[wz].bj!=)
{
if(x[wz].val==)
{
x[x[wz].s[]].val=;
x[x[wz].s[]].val=;
}
else
{
x[x[wz].s[]].val=;
x[x[wz].s[]].val=;
}
}
}
dfs2(x[wz].s[]);
dfs2(x[wz].s[]);
return;
}
int main()
{
scanf("%d",&n);
for(rii=n+;i<(n<<);i++)
{
scanf("%d",&x[i].bj);
}
for(rii=;i<=(n-)<<;i++)
{
int from,to;
scanf("%d%d",&from,&to);
add(from,to);
add(to,from);
}
ycl(n+,);
for(rii=;i<=n;i++)
{
int from;
scanf("%d",&from);
x[from].bh=i;
}
dfs(n+);
x[n+].val=;
dfs2(n+);
for(rii=;i<=n;i++)
{
x[i].val?putchar(''):putchar('');
}
return ;
}
code#5 P4 逻辑树的更多相关文章
- 2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- wpf 逻辑树与可视化树
XAML天生就是用来呈现用户界面的,这是由于它具有层次化的特性.在WPF中,用户界面由一个对象树构建而成,这棵树叫作逻辑树.逻辑树的概念很直观,但是为什么要关注它呢?因为几乎WPF的每一方面(属性.事 ...
- 【WPF】逻辑树和视觉树
WPF中提供了遍历逻辑树和视觉树的辅助类:System.Windows.LogicalTreeHelper和 System.Windows.Media.VisualTreeHelper. 注意遍历的位 ...
- WPF学习(4)逻辑树和可视树
前面几节说了一些WPF的基础,包括XAML和布局等.在接下来的几节,我们来说说WPF的核心概念,包括逻辑树和可视树.依赖对象和依赖属性.路由事件.命令这几个部分.本节介绍下逻辑树(Logical Tr ...
- WPF中的逻辑树和可视化树
WPF中的逻辑树是指XAML元素级别的嵌套关系,逻辑树中的节点对应着XAML中的元素. 为了方便地自定义控件模板,WPF在逻辑树的基础上进一步细化,形成了一个“可视化树(Visual Tree)”,树 ...
- 分析技术和方法论营销理论知识框架,营销方面4P、用户使用行为、STP,管理方面5W2H、逻辑树、金字塔、生命周期
原文:五种分析框架:PEST.5W2H.逻辑树.4P.用户使用行为 最近在一点点的啃<谁说菜鸟不懂得数据分析>,相当慢,相当的费脑力,总之,真正的学习伴随着痛苦:) 最初拿到这本书的时候, ...
- WPF路由事件一:逻辑树和可视树
一.什么是逻辑树 逻辑树就是描述WPF界面元素的实际构成,它是由程序在XAML中所有的UI元素组成.最显著的特点就是由布局控件.或者其他常用的控件组成. <Window x:Class=&quo ...
- WPF知识点全攻略06- WPF逻辑树(Logical Tree)和可视树(Visual Tree)
介绍概念之前,先来分析一段代码: xaml代码如下: <Window x:Class="WpfApp1.MainWindow" xmlns="http://sche ...
- WPF的逻辑树与视觉树(3)Visual呈现
原文:WPF的逻辑树与视觉树(3)Visual呈现 这篇就点到为止,挑重点讲 绘图方式有两种 1.继承UIElement,重写OnRender方法 public partial class Windo ...
随机推荐
- hustoj搭建--常见问题
环境: Centos6.5 apache2+PHP5+MySQL 设置apache服务器网站根路径(设置之后可通过IP访问OJ) 1. 进入目录/etc/httpd/conf下的httpd.con ...
- 为什么懂云的IT高手能过得比你好
盼望着,盼望着,一年一度的国庆7天长假还有不到24小时就到来了.各个部门的同事都已准备好满世界旅行去了. IT 部门各位同事的心还是悬着,信息系统还要持续的运转,对外的网站不能停,假期的线上促销也不能 ...
- .net core系列之《新一代的配置系统Configuration在支持多数据源,热更新,层级化方面代码快速实践》
在我们之前.Net Framework的项目中,配置文件是WebConfig或AppcConfig文件,而当我们想要添加我们自定义的节点时,还需要在这个文件中的section中定义我们自定义的节点,这 ...
- 《Python指南》学习笔记 一
更新时间:2018-06-14 <Python指南>原文在这里.本篇笔记主要是划重点. Python 3.6.3 1.简单入门 1.1 编码 默认情况下,Python 源文件是 UTF-8 ...
- iOS9 News 应用
iOS9 News 应用 iOS9 中国区虽然没有 News 应用,但最新的开发工具中是有的,以下是笔者截取的模拟器gif图,供君欣赏:
- 同时对view延时执行两个动画时候的现象
同时对view延时执行两个动画时候的现象 对于view延时执行了两个动画后,会将第一个动画效果终止了,直接在第一个动画的view的最后的状态上接执行后续的动画效果,也就是说,我们可以利用这个特性来写分 ...
- iOS设计模式 - 策略
iOS设计模式 - 策略 效果 说明 1. 把解决相同问题的算法抽象成策略(相同问题指的是输入参数相同,但根据算法不同输出参数会有差异) 2. 策略被封装在对象之中(是对象内容的一部分),策略改变的是 ...
- POP3、SMTP端口(SSL、TSL)
POP3服务器地址: 110 995 支持SSLSMTP服务器地址: 25 465 或者 587 支持SSL(TSL) 465端口是SSL/TLS通讯协议的 ...
- Linux入门-3 Linux磁盘及文件系统管理
1. 磁盘基本概念 1.1 磁盘结构:盘片(单碟vs多碟).磁头(读写数据) 1.2 磁盘在Linux中的表示 1.3 分区概念 2 使用fdisk进行磁盘管理 3 Linux文件系统 mke2fs ...
- Python初学者第二十一天 函数(4)-内置函数
21day 内置函数: 1.abs()绝对值函数 2.dict()创建一个字典 3.help()获取帮助信息 4.min()从一个列表中取出最小的数 5.max()从一个列表中取出最大值 6.bool ...