题意

给定一棵树,给出一些子树的权值关系,问是否矛盾(初始所有结点的下限为1)

思路

设lmin和lmax表示题目给定的限制范围,默认为[1..oo];amin和amax表示实际符合要求的范围。从根节点开始DP,通过子树的amin更新父节点的amin(父节点的amax一定是oo,因为它自身权值任意),判断此时amin和amax与lmin和lmax是否有交集(实际范围),没有则false。

代码

[cpp]
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#define MID(x,y) ((x+y)/2)
#define MEM(a,b) memset(a,b,sizeof(a))
#define REP(i, begin, end) for (int i = begin; i <= end; i ++)
using namespace std;

const int N = 10005;
const int oo = 0x7fffffff;
long long lmin[N], lmax[N], amin[N], amax[N];
vector <int> adj[N];

bool dfs(int u){
bool ok = true;
for (int i = 0; i < (int)adj[u].size(); i ++){
int v = adj[u][i];
ok = dfs(v);
if (ok == false)
return false;
amin[u] += amin[v];
amax[u] += amax[v];
}
amin[u] = max(amin[u], lmin[u]);
amax[u] = min(amax[u], lmax[u]);
if (amin[u] <= amax[u]) return true;
else return false;
}
int main(){
int n;
while(scanf("%d", &n) != EOF){
for (int i = 1; i <= n; i ++){
adj[i].clear();
lmin[i] = 1;
lmax[i] = oo;
amin[i] = 1;
amax[i] = oo;
}
for (int i = 2; i <= n; i ++){
int tmp;
scanf("%d", &tmp);
adj[tmp].push_back(i);
}
int q;
scanf("%d", &q);
bool res = true;
for (int i = 0; i < q; i ++){
int a, b;
char c;
scanf("%d%*c%c%*c%d", &a, &c, &b);
if (c == '='){
if (b <= lmax[a] && b >= lmin[a]) lmin[a] = lmax[a] = b;
else res = false;
}
else if (c == '<'){
lmax[a] = min((long long)(b - 1), lmax[a]);
}
else if (c == '>'){
lmin[a] = max((long long)(b + 1), lmin[a]);
}
}
if (!res){
puts("Lie");
}
else{
for (int i = 1; i <= n; i ++){
if (lmin[i] > lmax[i]){
res = false;
break;
}
}
if (!res){
puts("Lie");
}
else{
res = dfs(1);
if (res){
puts("True");
}
else{
puts("Lie");
}
}
}
}
return 0;
}
[/cpp]

HDU 4274 Spy's Work (树形DP)的更多相关文章

  1. hdu 4514 并查集+树形dp

    湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  2. [HDU 5293]Tree chain problem(树形dp+树链剖分)

    [HDU 5293]Tree chain problem(树形dp+树链剖分) 题面 在一棵树中,给出若干条链和链的权值,求选取不相交的链使得权值和最大. 分析 考虑树形dp,dp[x]表示以x为子树 ...

  3. HDU 5293 Tree chain problem 树形dp+dfs序+树状数组+LCA

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 题意: 给你一些链,每条链都有自己的价值,求不相交不重合的链能够组成的最大价值. 题解: 树形 ...

  4. hdu 4003 Find Metal Mineral 树形DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 Humans have discovered a kind of new metal miner ...

  5. HDU 5758 Explorer Bo(树形DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5758 [题目大意] 给出一棵树,每条路长度为1,允许从一个节点传送到任意一个节点,现在要求在传送次 ...

  6. 2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】

    Colorful Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  7. HDU 4123 Bob’s Race 树形dp+单调队列

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 Time Limit: 5000/2000 MS (Java/Others) Memory L ...

  8. HDU 4799 LIKE vs CANDLE 树形dp

    题意:有n个人,他们的关系,形成一棵有根树(0是树根,代表管理员),每个人有一个价值 现在有一条微博,每个人要么点赞,要么送一个蜡烛 初始一些人利用bug反转了某些人的操作(赞变蜡烛 或者 蜡烛变成赞 ...

  9. hdu 3586 Information Disturbing(树形dp + 二分)

    本文出自   http://blog.csdn.net/shuangde800 题目链接:   hdu-3586 题意 给一棵n个节点的树,节点编号为1-n,根节点为1.每条边有权值,砍掉一条边要花费 ...

随机推荐

  1. Mysql Having的用法:对group by之后的分组加限制条件(复制)

    在使用聚合函数之前,我们可以通过where对查询加限制条件,那么如果在group by之后我们要对分组里面的数据再加限制条件怎么办呢?答案是having. HAVING子句可以让我们筛选成组后的各组数 ...

  2. maven安装配置参数化打包命令

    Maven使用 maven的配置文件看似很复杂,其实只需要根据项目的实际背景,设置个别的几个配置项而已.maven有自己的一套默认配置,使用者除非必要,并不需要去修改那些约定内容.这就是所谓的“约定优 ...

  3. Django restful Framework 之Requests and Response 方法

    前言: 本章主要介绍REST framework 内置的必要的功能. Request objects Response objects Status codes Wrapping API views ...

  4. TOSCA自动化测试工具--识别元素唯一性的控件

    当Modules模块通过Scan识别出页面元素后,选择需要测试的对象,然后判断对象唯一性

  5. 由浅入深之Tensorflow(1)----linear_regression实现

    Tensorflow是目前非常流行的deeplearning框架,学习Tensorflow最好的方法是github上的tf项目https://github.com/tensorflow/tensorf ...

  6. vue package.json 解析

    vue package.json 中可以看到这个包的来源位置 在repository对象中的url中可以看到     所以当你要封装自己包的时候就可以改变这个地址去加载这个包(把你封装的包发到某个gi ...

  7. Django学习笔记之Queryset详解

    Django ORM用到三个类:Manager.QuerySet.Model.Manager定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manager为父类,定义自己 ...

  8. Shell学习小结 - 深入认识变量

    移动端访问不佳,请访问我的个人博客 变量的命名 对于初学者来说,可以简单的理解为,变量就是保存在计算机内存中的一系列的键值对. 列如: str="hello" 这里的str就是变量 ...

  9. SpringMVC,针对不支持PUT、DELETE提交的游览器处理方式

    在REST服务中必不可少的需要PUT.DELETE提交,但是目前很多的游览器并不支持.所以在使用REST前需要进行一些额外的处理. 具体解决方案如下: 1,先添加一个filter.这个filter就是 ...

  10. PHP设计模式(六): 单例模式