HDU 4274 Spy's Work (树形DP)
题意
给定一棵树,给出一些子树的权值关系,问是否矛盾(初始所有结点的下限为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)的更多相关文章
- hdu 4514 并查集+树形dp
湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- [HDU 5293]Tree chain problem(树形dp+树链剖分)
[HDU 5293]Tree chain problem(树形dp+树链剖分) 题面 在一棵树中,给出若干条链和链的权值,求选取不相交的链使得权值和最大. 分析 考虑树形dp,dp[x]表示以x为子树 ...
- HDU 5293 Tree chain problem 树形dp+dfs序+树状数组+LCA
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 题意: 给你一些链,每条链都有自己的价值,求不相交不重合的链能够组成的最大价值. 题解: 树形 ...
- hdu 4003 Find Metal Mineral 树形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 Humans have discovered a kind of new metal miner ...
- HDU 5758 Explorer Bo(树形DP)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5758 [题目大意] 给出一棵树,每条路长度为1,允许从一个节点传送到任意一个节点,现在要求在传送次 ...
- 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 ...
- HDU 4123 Bob’s Race 树形dp+单调队列
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 Time Limit: 5000/2000 MS (Java/Others) Memory L ...
- HDU 4799 LIKE vs CANDLE 树形dp
题意:有n个人,他们的关系,形成一棵有根树(0是树根,代表管理员),每个人有一个价值 现在有一条微博,每个人要么点赞,要么送一个蜡烛 初始一些人利用bug反转了某些人的操作(赞变蜡烛 或者 蜡烛变成赞 ...
- hdu 3586 Information Disturbing(树形dp + 二分)
本文出自 http://blog.csdn.net/shuangde800 题目链接: hdu-3586 题意 给一棵n个节点的树,节点编号为1-n,根节点为1.每条边有权值,砍掉一条边要花费 ...
随机推荐
- Java基础知识陷阱(八)
本文发表于本人博客. 这次我来说说关于&跟&&的区别,大家都知道&是位运算符,而&&是逻辑运算符,看下面代码: public static void m ...
- HttpClient使用详解(转)
http://blog.csdn.net/wangpeng047/article/details/19624529
- 【转】js获取当前日期时间“yyyy-MM-dd HH:MM:SS”
获取当前的日期时间 格式“yyyy-MM-dd HH:MM:SS” 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 function getNowFormatD ...
- webmagic的设计机制及原理-如何开发一个Java爬虫 转
此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里:https://github.com/code4craft/webmagic/blob/master/user-ma ...
- Python学习示例源码
函数和函数式编程 函数定义: 函数调用: 过程定义: 过程调用: 面向过程的编程方法: """ 面向对象-----类------class 面向过程-----过程---- ...
- 对象转化为 xml字符串
public static string ToXml<T>(this T o) where T : new() { string retVal; using (var ms = new M ...
- CentOS修改时区、日期、时间
一.时区 显示时区 date --help 获取帮助 date -R date +%z 修改时区 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ...
- 20145312 《Java程序设计》第八周学习总结
20145312 <Java程序设计>第八周学习总结 学习笔记 Chapter 15时间与日期 15.1 日志 15.1.1 日志API简介 java.util.logging包提供了日志 ...
- mybatis关联配置(一对多配置)
敲代码也有不少日子了,今天碰到个需求,就是定时器生成一张表,但是这个表的某些数据是从另外两张表中拿到的,定外两张表又是一对多的关系,想着咋在一个接口就能敲出来,大概结构如下 然后需要a表的数据(比如张 ...
- [BZOJ1576]安全路经Travel
题目大意:从1号点出发,到每个点的最短路的最后一条边不能被访问,求此时1号点到其他点的最短路 建立最短路树,对于一条非树边,把它加进去会形成一个环和一条链,如图: 即红色和蓝色路径构成的图,它的长度为 ...