Broken BST CodeForces - 797D
题意:给定一棵任意的树,对树上所有结点的权值运行给定的算法(二叉查找树的查找算法)(treenode指根结点),问对于多少个权值这个算法会返回false。
方法:如果要求对于值x运行算法能访问到结点k,根据给定算法还有树,可以推出对于每个结点k的x的范围(即最小值,最大值)(某结点p左子树的结点的x全部小于p的权值,右子树的结点的x全部大于p的权值)(由于全部权值均为整数,即使只知道小于和大于也可以推出最小值、最大值)。
然而,对于某个结点p的权值q,如果q不能访问到p,但能访问到另一个权值为q的结点,那么也会返回true。也就是对于值q,只要某个权值为q的结点可以由值q访问到,那么答案就要加上权值为q的点的总和。
由于权值的范围有点大,输出的时候不能直接用数组标记权值q能否返回true,必须要用特殊的方法。
#include<cstdio>
#include<algorithm>
using namespace std;
struct X
{
int v;
bool nok;
bool operator<(const X& b) const
{
return v<b.v;
}
}p[];
int l[],r[],fa[];
int min1[],max1[];
int n,root,ans;
//bool ok[1000000010];
void dfs(int x,int ll)//ll表示左/右子树
{
/*if(p[fa[x]].nok)
p[x].nok=true;
else
{*/
min1[x]=min1[fa[x]];
max1[x]=max1[fa[x]];
if(ll==)
{
max1[x]=min(max1[x],p[fa[x]].v-);
if(min1[x]>p[x].v||max1[x]<p[x].v)
p[x].nok=true;
}
else
{
min1[x]=max(min1[x],p[fa[x]].v+);
if(min1[x]>p[x].v||max1[x]<p[x].v)
p[x].nok=true;
}
//}
if(l[x]) dfs(l[x],);
if(r[x]) dfs(r[x],);
}
int main()
{
int i,t;
bool boo;
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%d%d%d",&p[i].v,&l[i],&r[i]);
fa[l[i]]=fa[r[i]]=i;
}
for(i=;i<=n;i++)
if(fa[i]==)
{
root=i;
break;
}
min1[root]=-0x6f6f6f6f;
max1[root]=0x6f6f6f6f;
if(l[root]) dfs(l[root],);
if(r[root]) dfs(r[root],);
// for(i=1;i<=n;i++)
// if(!nok[i])
// ok[v[i]]=true;
// for(i=1;i<=n;i++)
// if(!ok[v[i]])
// ans++;//这样就是"直接用数组标记权值q能否返回true"但空间不够
sort(p+,p+n+);
for(i=;i<n;)
{
t=;
boo=false;
do
{
i++;
t++;
if(!p[i].nok)
boo=true;
}
while(p[i].v==p[i+].v);
if(boo==false)
ans+=t;
}
printf("%d",ans);
return ;
}
Broken BST CodeForces - 797D的更多相关文章
- AC日记——Broken BST codeforces 797d
D - Broken BST 思路: 二叉搜索树: 它时间很优是因为每次都能把区间缩减为原来的一半: 所以,我们每次都缩减权值区间. 然后判断dis[now]是否在区间中: 代码: #include ...
- Codeforces 797 D. Broken BST
D. Broken BST http://codeforces.com/problemset/problem/797/D time limit per test 1 second memory lim ...
- 【codeforces 797D】Broken BST
[题目链接]:http://codeforces.com/contest/797/problem/D [题意] 给你一个二叉树; 然后问你,对于二叉树中每个节点的权值; 如果尝试用BST的方法去找; ...
- CodeForces 797D Broken BST
$dfs$,线段树. 通过观察可以发现,某位置要能被找到,和他到根这条路上的每个节点的权值存在密切的联系,且是父节点的左儿子还是右儿子也有联系. 可以从根开始$dfs$,边走边更新线段树,如果遍历左儿 ...
- D. Recovering BST Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)
http://codeforces.com/contest/1025/problem/D 树 dp 优化 f[x][y][0]=f[x][z][1] & f[z+1][y][0] ( gcd( ...
- Broken robot CodeForces - 24D (概率DP)
You received as a gift a very clever robot walking on a rectangular board. Unfortunately, you unders ...
- Recovering BST CodeForces - 1025D (区间dp, gcd)
大意: 给定$n$个数, 任意两个$gcd>1$的数间可以连边, 求是否能构造一棵BST. 数据范围比较大, 刚开始写的$O(n^3\omega(1e9))$竟然T了..优化到$O(n^3)$才 ...
- Alex and broken contest CodeForces - 877A
/* Name: Copyright: Author: Date: 2018/5/2 10:45:16 Description: 要求出现一个朋友的名字,仅一次 */ #include <ios ...
- Broken robot CodeForces - 24D (三对角矩阵简化高斯消元+概率dp)
题意: 有一个N行M列的矩阵,机器人最初位于第i行和第j列.然后,机器人可以在每一步都转到另一个单元.目的是转到最底部(第N个)行.机器人可以停留在当前单元格处,向左移动,向右移动或移动到当前位置下方 ...
随机推荐
- 利用NSMutableAttributedString实现label上字体大小颜色行间距的改变
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.si ...
- 流媒体开发之开源项目live555---live555 server 编译 包括更改帧率大小
由于要测试8148解码器的性能,需要搭建不同帧率25fps - >30fps,宏块大小defualt 100 000 -> 200 000不同大小的h264码流,所以就需要编译改动的liv ...
- 完美解决android显示gif
今天是周5啊.纠结了一天.android显示gif,没该控件 网上找开源项目 找到个viewgif.该作者在各大站点都在推荐自己的项目...好吧.用下吧. . . . 结果呢: 图片略微一大就 内存溢 ...
- MongoDB Spark Connector
[在文件/usr/bin/yum./usr/libexec/urlgrabber-ext-down最上面的一行改为#!/usr/bin/python2.7] yum install git Note: ...
- hihocoder hiho一下 第二十六周 最小生成树一·(Prim算法)
题目1 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥 ...
- easyui 在日期不满足要求的情况下,让修改链接不可点,或者修改消失
*****略***** columns:[[ {field:'id',checkbox:true}, {field:'mDate',width:10,title:'菜单日期',align:'left' ...
- js生成随机编码并赋值给input文本框
效果图如下: 页面代码: <div class="form-item form-width-in fr"> <label>产 品 编 码</label ...
- web开发中的mysql使用
一.单机mysql与mysql集群 1. 单机mysql很好理解,在一台物理机上安装好mysql服务端程序,使用这一台机器的硬件(cpu,内存,硬盘)进行数据的处理. 2.mysql集群 MySQL集 ...
- I.MX6 u-boot 2009 lvds hdmi lcd 补丁
/************************************************************************* * I.MX6 u-boot 2009 lvds ...
- 理解分布式id生成算法SnowFlake
理解分布式id生成算法SnowFlake https://segmentfault.com/a/1190000011282426#articleHeader2 分布式id生成算法的有很多种,Twitt ...