HDU 4274 Spy's Work (树 DFS)
给定N个点,每个点都有一个唯一的前驱结点(点1为大boss),每个点的实际权值是子节点的求和值。现在给出某些点的权值的估算(> , = , < ),问这些估算是否会有冲突,现在保证每个点的权值是大于等于1的。
分析: 判断标准为每个点的上下界,初始化为INF和1,每个点上下界可以根据给出的信息,或者搜索出的信息进行更新,如果出现上界小于下界的情况就说明矛盾了。
计算过程中数据量竟然没有超过int................
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
# define INF 0x7FFFFFFF
using namespace std;
int n,m,flag;
struct Guess {
int high,low;
char c;
} guess[10001]; struct node {
int s,e,next;
} ed[10001];
int head[10001],num;
void init() {
memset(head,-1,sizeof(head));
num = 0;
flag = 1;
for(int i=0; i<=n; i++) {
guess[i].low = 1;
guess[i].high = INF;
}
}
void add(int s,int e) {
ed[num].s = s;
ed[num].e = e;
ed[num].next = head[s];
head[s] = num++;
} void cmp(int i,int h,int l) {
int hh = min(guess[i].high ,h);
int ll = max(guess[i].low,l);
if(hh < ll) flag = 0;
guess[i].high = hh;
guess[i].low = ll;
} void dfs(int v0) {
if(flag == 0) return ;
int h = INF,l = 1;
for(int i=head[v0]; i != -1; i= ed[i].next) {
int e = ed[i].e;
dfs(e);
l += guess[e].low;
}
cmp(v0,h,l);
}
int main() {
int t,a,b;
char c;
while(scanf("%d",&n) != EOF) {
init();
for(int i=2; i<=n; i++) {
scanf("%d",&t);
add(t,i);
}
scanf("%d",&m);
int h,l;
for(int i=0; i<m; i++) {
scanf("%d %c %d",&a,&c,&b);
h = INF;
l = 1;
if(c == '=') {
l = b; h = b;
}
if(c == '<') h = b - 1;
if(c == '>') l = b + 1;
cmp(a,h,l);
}
dfs(1);
if(flag) printf("True\n");
else printf("Lie\n");
}
return 0;
}
HDU 4274 Spy's Work (树 DFS)的更多相关文章
- HDU 1298 T9(字典树+dfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1298 题意:模拟手机9键,给出每个单词的使用频率.现在给出按键的顺序,问每次按键后首字是什么(也就是要概率最大的 ...
- Hdu 4274 Spy's Work
Spy's Work Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 4274 Spy's Work(水题)
Spy's Work Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 4274 Spy's Work (树形DP)
题意 给定一棵树,给出一些子树的权值关系,问是否矛盾(初始所有结点的下限为1) 思路 设lmin和lmax表示题目给定的限制范围,默认为[1..oo]:amin和amax表示实际符合要求的范围.从根节 ...
- HDU 4274 Spy's Work (树形DP,模拟)
题意: 给定一棵树,每个节点代表一个员工,节点编号小的级别就小,那么点1就是boss了.接下来给出对m个点的限制,有3种符号分别是op=“大于/小于/等于”,表示以第i个点为根的子树所有人的工资之和 ...
- S - Query on a tree HDU - 3804 线段树+dfs序
S - Query on a tree HDU - 3804 离散化+权值线段树 题目大意:给你一棵树,让你求这棵树上询问的点到根节点直接最大小于等于val的长度. 这个题目和之前写的那个给你一棵 ...
- HDU 4605 Magic Ball Game (dfs+离线树状数组)
题意:给你一颗有根树,它的孩子要么只有两个,要么没有,且每个点都有一个权值w. 接着给你一个权值为x的球,它从更节点开始向下掉,有三种情况 x=w[now]:停在此点 x<w[now]:当有孩子 ...
- HDU 5692 线段树+dfs序
Snacks Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- HDU 1010 Tempter of the Bone --- DFS
HDU 1010 题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D. 参考: 奇偶剪枝 奇偶剪枝简单解释: 在一个只能往X.Y方向走的方格上,从起点到终点的最短步数 ...
随机推荐
- 替换IMG
<?php $str = '<img src="http://img01.feiniu.com/images/show/detail/image/20141031/9b3bbc3 ...
- SpringMVC文件上传与下载
一.关键步骤 ①引入核心JAR文件 SpringMVC实现文件上传,需要再添加两个jar包.一个是文件上传的jar包,一个是其所依赖的IO包.这两个jar包,均在Spring支持库的org.apach ...
- Yum出错Error: Cannot find a valid baseurl for repo: base
centos yum 错误 Error: Cannot find a valid baseurl for repo: addons 装了个CentOS 6.5,使用yum时出现了以下的错误提示. [r ...
- Jquery autocomplete 插件使用
轻松实现类似百度输入框联想功能: autocomplete 是一个很厉害的插件,该插件基于jquery,在jquery官网能下载到最新版本. 首先,jQuery UI 是基于 jQuery 的,所以, ...
- mysql求时间差
SELECT TIMESTAMPDIFF(SECOND, now(), "2012-11-11 00:00:00") 语法为:TIMESTAMPDIFF(unit,datetime ...
- Android(java)学习笔记261:JNI之编写jni程序适配所有处理器型号
1. 还是以"02_两个数相加"为例,你会发现这个jni程序只能在ARM处理器下运行,如下: 如果我们让上面的程序运行在x86模拟器上,处理平台不对应,报如下错误: 03-29 ...
- WPF之Binding的使用
引出: 在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件 ...
- 解决sql2008连接数据库,无法为该请求检索数据,错误916
通常在使用sql server management studio 2008 连接数据库,可以链接上,但是无法查看自己的数据库,点击数据库或刷新数据库列表后,提示:无法为该请求检索数据,错误916,如 ...
- C#获取当前路径的几种方法
C#获取当前路径的方法如下: 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName -获取模块的完整路径. 2. ...
- c笔试题(1)
1.sizeof和strlen的区别 #include<stdio.h> #include<string.h> int main() { char a[10] = " ...