【codeforces 797D】Broken BST
【题目链接】:http://codeforces.com/contest/797/problem/D
【题意】
给你一个二叉树;
然后问你,对于二叉树中每个节点的权值;
如果尝试用BST的方法去找;
能不能找到这样一个权值的节点;
(只要找到这个权值的节点就好,没有说特定找哪一个)
【题解】
对于二叉树中的每一个节点,我们都能确定;
可以到达这个节点的权值的范围;
对于节点不在这个权值范围内的点;
答案递增;
但有可能会有
3
2 -1 -1
1 1 3
2 -1 -1
这样的数据
这里的答案应该是0而不是1;
因为2是能够通过bst的方法找到的;
虽然找左儿子的时候返回的是右儿子的;但是找到了!
所以最后如果有某些权值在某一些地方找不到,但是在另外一些地方找到了则也是可以的.
【Number Of WA】
2
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1e5+100;
const int INF = 1e9+1000;
int n,a[N],l[N],r[N],bo[N],root,ans;
int siz[N];
map <int,int> dic1,dic2;
void dfs2(int x,int fa,int mi,int ma)
{
if (mi<=a[x]&&a[x]<=ma)
{
dic1[a[x]] = 1;
}
else
{
ans++;
dic2[a[x]]++;
}
if (l[x]!=-1) dfs2(l[x],x,mi,min(ma,a[x]));
if (r[x]!=-1) dfs2(r[x],x,max(mi,a[x]),ma);
}
int main()
{
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(false),cin.tie(0);
cin >> n;
rep1(i,1,n)
{
cin >> a[i] >> l[i] >> r[i];
if (l[i]!=-1) bo[l[i]] = true;
if (r[i]!=-1) bo[r[i]] = true;
}
rep1(i,1,n)
if (!bo[i])
root = i;
dfs2(root,0,-INF,INF);
rep1(i,1,n)
if (dic1[a[i]] && dic2[a[i]]>0)
{
dic1[a[i]]=0;
ans-=dic2[a[i]];
}
cout << ans << endl;
return 0;
}
【codeforces 797D】Broken BST的更多相关文章
- 【26.34%】【codeforces 722A】Broken Clock
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- Codeforces 797 D. Broken BST
D. Broken BST http://codeforces.com/problemset/problem/797/D time limit per test 1 second memory lim ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【codeforces 707C】Pythagorean Triples
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
- 【codeforces 709D】Recover the String
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
- 【codeforces 709B】Checkpoints
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
- 【codeforces 709C】Letters Cyclic Shift
[题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...
- 【Codeforces 429D】 Tricky Function
[题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...
随机推荐
- android自定义dialog中点击listview的item事件关闭dialog
import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; ...
- 【SDOI 2010】 魔法猪学院
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1975 [算法] A*求k短路 [代码] #include<bits/stdc+ ...
- Palindrome(dp)
http://poj.org/problem?id=1159 题意:给定一个字符,问最少插入多少字符,使该字符串变成回文字符串. 思路:设原字符串序列为X,其逆字符串为Y,则最少插入的字符数=leng ...
- codevs1959拔河比赛(二维费用背包)
1959 拔河比赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 一个学校举行拔河比赛,所有的人被分成了两组,每个人 ...
- python中使用pip安装报错:Fatal error in launcher... 解决方法
python安装了2和3版本在 cmd 中用pip报的错误为:Fatal error in launcher:Unable to create process using 这是因为你安装了python ...
- layui富文本编译器后台获取图片路径
@RequestMapping("add") public ModelAndView add(News news){ ModelAndView mav = ne ...
- Android框架式编程之Android Architecture Components
1. 当前Android开发面临的问题 Android开发不同于传统的桌面程序开发,桌面程序一般都有唯一的快捷方式入口,并且常作为单进程存在:而一个典型的Android应用通常由多个应用组件构成,包括 ...
- 深入理解Redis——(总纲)
前言 Redis这个东西,我来来回回的也搞了好几遍,之前更偏向于实战,很多时候只知其然而不知其所以然,最近借阅了一本<深入理解Redis>,就系统的整理一下. 为何选择Redis 开源免费 ...
- 5.17 Quartz笔记
有用到构建者模式: builder---JobDetail相当于需要构建者构建出来的一个配件:JobDetail为Job实例提供了许多设置属性,以及JobDetaMap成员变量属性,它用来存储特定Jo ...
- MTK刷机工具Flash_Tool部分4032错误解决办法
MTK刷机工具Flash_Tool部分4032错误解决办法 先说明一点,这个办法不是万能的,我测试解决了以下两种情况下的4032: 1.本来正常的开发板,因为一次刷机失败后就一直变4032了 2.新开 ...