给定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;
}

最新文章

  1. 通过url传参
  2. django例子,question_text为中文时候报错
  3. Android ant自动打包脚本:自动替换友盟渠道、版本号、包名
  4. jQuery实现jsonp源码分析(京东2015面试)
  5. LinkButton( 按钮)
  6. codeforces 633C. Spy Syndrome 2 hash
  7. Putty是一个专业的SSH连接客户端
  8. Spring in Action --- 第二章 装配Bean
  9. php session 生命周期代码实例
  10. Charles抓取https请求详解
  11. 第1阶段——关于u-boot目标文件start.o中.globl 和.balignl理解(3)
  12. js学习笔记(延时器)
  13. appcompat v21: 让 Android 5.0 前的设备支持 Material Design
  14. Spring Security入门(3-8)Spring Security获取session中的UserDetail
  15. foreach 與 reference 的雷
  16. JMeter通过自定义jar调用和BeanShell源码
  17. php几种常见排序算法
  18. logstash获取日志,时间戳相差8小时
  19. 不停mysql服务添加从库的两种方式
  20. Train-Alypay-Cloud

热门文章

  1. (转)在SAE使用Apple Push Notification Service服务开发iOS应用, 实现消息推送
  2. (转)Linux下Apache 限速模块安装笔记
  3. HDU 1874-畅通project续(最短路Dijkstra+优先队列)
  4. JAVA的RSA加密算法工具类
  5. 【Spring MVC系列】--(5)理解AOP
  6. linux串口驱动分析
  7. Linux字符设备驱动
  8. Ftp实现文件同步
  9. Java基础知识强化32:String类之String类的判断功能
  10. 从前有个聊天室(socket&amp;threading)