Weights Assignment For Tree Edges
题目:
(我的题目很长,你忍一下……)




题目分析:
这道题目的体面比较复杂,先是讲了一下树是怎样的一个结构,并且告诉我们在这里,他是以什么样的一种方式描述一棵树的,就是通过描述每个节点的父节点是哪个(b数组),然后告诉我们要安排边权,使得树中的每个节点到根的距离都能如同p数组那样进行排序,然后叫我们输出对应每个点和他的父结点之间的边权即可。
题解:
首先这道题是一道非常经典的让我们判断能否构造一个数组,使得题干条件成立,如果不能输出-1;
既然这样的话,我们肯定要先分析什么情况下会输出-1,那么就是一个节点到根的距离反而比它父节点到根的距离更近,我们知道这是不可能的,因为在这里所有的边权都只可能是正数,所以我们就要去看是否存在这种情况,但是根据b数组我们只能知道这个节点的父结点是什么,并不能很快的查找到这个点的所有子节点,所以我们这里就要运用我们在Acwing上学到的邻接表来存储,这样就可以很快遍历当前节点的所有子节点,这一步是在输入b数组的时候同步进行的。但是光找到子节点没有用,我们不能用O(1)的时间复杂度直接找到这个子节点的位置,所以我们要对p数组进行修改,使得P[i]代表的是i是离根最近的第P[i]个点,这样就能根据P数组直接得到每个点的位置;
只要能经过上一步的检查,那么到这里的就一定能构造出一个对应的距离,我们这样考虑,每个到根的距离的差只差1,比如0,1,2,3……n。 所以我们定义一个maxd表示当前到根的最大的距离,然后下一个点到根的距离就是maxd,那么这个点到父结点的边权就是maxd + 1 - dist[father],所以我们还要定义一个dist数组存储当前节点到根的距离,但是这样的话,我们遍历的顺序就应该是从近到远,所以那个P数组我们要换个形式使之保留。 这里整个的思路就是设定每个点到根节点的距离,然后进行赋值。
从题目中,我们可以看出,这是一道非常经典的用空间换时间的思路,我开了很多的数组,就是为了在为了找到它时能用O(1)的效率找到;
代码:Submission #153732004 - Codeforces
Weights Assignment For Tree Edges的更多相关文章
- atcoder NIKKEI Programming Contest 2019 E - Weights on Vertices and Edges
题目链接:Weights on Vertices and Edges 题目大意:有一个\(n\)个点\(m\)条边的无向图,点有点权,边有边权,问至少删去多少条边使得对于剩下的每一条边,它所在的联通块 ...
- AtCoder NIKKEI Programming Contest 2019 E. Weights on Vertices and Edges (并查集)
题目链接:https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_e 题意:给出一个 n 个点 m 条边的无向图,每个点和每 ...
- [atAGC052B]Tree Edges XOR
定义两点的距离$d(x,y)$为$x$到$y$路径上边权异或和,则两棵树相同当且仅当$\forall 1\le i\le n$,$d(1,i)$相同 新建一个节点0,连边$(0,1)$,初始权值为0, ...
- CSU 1663: Tree(树链剖分)
1663: Tree Time Limit: 5 Sec Memory Limit: 128 MB Submit: 26 Solved: 11 [Submit][id=1663"> ...
- codeforces 342E :Xenia and Tree
Description Xenia the programmer has a tree consisting of n nodes. We will consider the tree nodes i ...
- CodeForces 682C Alyona and the Tree (树+dfs)
Alyona and the Tree 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/C Description Alyona ...
- cf202-div 1-B - Apple Tree:搜索,数论,树的遍历
http://codeforces.com/contest/348/problem/B B. Apple Tree time limit per test 2 seconds memory l ...
- Codeforces Round #358 (Div. 2) C. Alyona and the Tree 水题
C. Alyona and the Tree 题目连接: http://www.codeforces.com/contest/682/problem/C Description Alyona deci ...
- Codeforces Round #358 (Div. 2) C. Alyona and the Tree dfs
C. Alyona and the Tree time limit per test 1 second memory limit per test 256 megabytes input standa ...
随机推荐
- Django的缓存机制和信号
Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户 ...
- Pulsar 也会重复消费?
背景 许久没有分享 Java 相关的问题排查了,最近帮同事一起排查了一个问题: 在使用 Pulsar 消费时,发生了同一条消息反复消费的情况. 排查 当他告诉我这个现象的时候我就持怀疑态度,根据之前使 ...
- 说一下linux启动过程boot流程
linux启动过程 https://www.ibm.com/developerworks/cn/linux/l-linuxboot/index.html http://www.ruanyifeng.c ...
- 使用cgroup和tc限制带宽
cgroup子系统net_cls 可以给 packet 打上 classid 的标签,用于过滤分类,这个classid就是用于标记skb所属的 qdisc class 的.有了这个标签,流量控制器(t ...
- Mysql等保部分加固
一.等保要求:操作系统和数据库系统管理用户身份标识应具有不易被冒用的特点,口令应有复杂度要求并定期更换. 实施步骤: 启用口令复杂审核(5.6.6版本以上,才有此模块功能,需要重启mysql). 查看 ...
- vue学习过程总结(07) - vue的后台服务API封装及跨域问题的解决
以登录流程为例说明接口的封装. 1.登录调用后台的登录api 登录界面的代码 <template> <div class="login-page"> < ...
- linux下串口测试程序
通过简单的参数配置,执行文件+串口号+波特率 #include <stdio.h> #include <stdlib.h> #include <unistd.h> ...
- Python中的鸭子类型
今天,我们来聊一聊Python中的鸭子类型(duck typing). 编程语言具有类型概念,例如Python中有数字类型.字符串类型.布尔类型,或者更加复杂的结构,例如元组tuple.列表list. ...
- 转载:TCP协议如何保证可靠传输
转载至:https://www.cnblogs.com/xiaokang01/p/10033267.html TCP协议如何保证可靠传输 概述: TCP协议保证数据传输可靠性的方式主要有: (校 序 ...
- 哪个类包含 clone 方法?是 Cloneable 还是 Object?
java.lang.Cloneable 是一个标示性接口,不包含任何方法,clone 方法在 object 类中定义.并且需要知道 clone() 方法是一个本地方法,这意味着它是由 c 或 c++ ...