题目:

(我的题目很长,你忍一下……)

题目分析:

这道题目的体面比较复杂,先是讲了一下树是怎样的一个结构,并且告诉我们在这里,他是以什么样的一种方式描述一棵树的,就是通过描述每个节点的父节点是哪个(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的更多相关文章

  1. atcoder NIKKEI Programming Contest 2019 E - Weights on Vertices and Edges

    题目链接:Weights on Vertices and Edges 题目大意:有一个\(n\)个点\(m\)条边的无向图,点有点权,边有边权,问至少删去多少条边使得对于剩下的每一条边,它所在的联通块 ...

  2. AtCoder NIKKEI Programming Contest 2019 E. Weights on Vertices and Edges (并查集)

    题目链接:https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_e 题意:给出一个 n 个点 m 条边的无向图,每个点和每 ...

  3. [atAGC052B]Tree Edges XOR

    定义两点的距离$d(x,y)$为$x$到$y$路径上边权异或和,则两棵树相同当且仅当$\forall 1\le i\le n$,$d(1,i)$相同 新建一个节点0,连边$(0,1)$,初始权值为0, ...

  4. CSU 1663: Tree(树链剖分)

    1663: Tree Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 26  Solved: 11 [Submit][id=1663"> ...

  5. codeforces 342E :Xenia and Tree

    Description Xenia the programmer has a tree consisting of n nodes. We will consider the tree nodes i ...

  6. CodeForces 682C Alyona and the Tree (树+dfs)

    Alyona and the Tree 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/C Description Alyona ...

  7. cf202-div 1-B - Apple Tree:搜索,数论,树的遍历

      http://codeforces.com/contest/348/problem/B   B. Apple Tree time limit per test 2 seconds memory l ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. Mysql常用操作笔记

    目录 登录 退出 Sql语句分类 DDL操作数据库 1.创建数据库 2.查看数据库 3.修改数据库 4.删除数据库 5.使用数据库 6.创建表 7.查看表 8.删除表 9.修改表 10.常用字段类型 ...

  2. vs2017连接sqlsever数据库

    vs2017连接mysql数据库操作步骤 怎样使用vs2017连接数据库 [C++]VS2015/VS2017连接Mysql数据库教程

  3. 面试问题之计算机网络:HTTP和HTTPS的区别

    https://blog.csdn.net/qq_38289815/article/details/80969419

  4. jQuery--选择器案例实战

    1.案例需求 jquery最基础的选择器部分已经基本结束,来一个简单案例总结回顾下学的东西. 案例需求: 用一个按钮控制元素的显示与隐藏,页面如下,从第五个开始,不要最后一个,控制他们的显示和隐藏. ...

  5. Java 中如何实现序列化,有什么意义?

    序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流 化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间. 序列化是为了解决对象流读写操作时可能引发的问题(如果不进 ...

  6. Linux Yum仓库源配置

    Yum概念:Yum软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术 Yum配置仓库源放置位置:/etc/yum.repo.d/ :配置文件需以 .repo 结 ...

  7. MySQL 支持事务吗?

    在缺省模式下,MySQL 是 autocommit 模式的,所有的数据库更新操作都会即时 提交,所以在缺省情况下,MySQL 是不支持事务的. 但是如果你的 MySQL 表类型是使用 InnoDB T ...

  8. 解释 WEB 模块?

    Spring 的 WEB 模块是构建在 application context 模块基础之上,提供一个适 合 web 应用的上下文.这个模块也包括支持多种面向 web 的任务,如透明地处理 多个文件上 ...

  9. 构造器注入和 setter 依赖注入,那种方式更好?

    每种方式都有它的缺点和优点.构造器注入保证所有的注入都被初始化,但是 setter 注入提供更好的灵活性来设置可选依赖.如果使用 XML 来描述依赖, Setter 注入的可读写会更强.经验法则是强制 ...

  10. 关于XML文件

    关于xml文件没有提示(eclipse) 点我