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 ...
随机推荐
- 域渗透 | kerberos认证及过程中产生的攻击
文章首发于公众号<Z2O安全攻防> 直接公众号文章复制过来的,排版可能有点乱, 可以去公众号看. https://mp.weixin.qq.com/s/WMGkQoMnQdyG8UmS ...
- 不想业务被中断?快来解锁华为云RDS for MySQL新特性
摘要:新特性上线!华为云RDS for MySQL又添新技能,实力保障业务连续性. 本文分享自华为云社区<不想业务被中断?快来解锁华为云RDS for MySQL新特性>,作者:Gauss ...
- vector存放边的方法
#include<bits/stdc++.h> using namespace std; struct Edge{ int x; int y; }; vector <Edge> ...
- RenderDoc图形调试器详细使用教程(基于DirectX11)
前言 由于最近Visual Studio的图形调试器老是抽风,不得不寻找一个替代品了. 对于图形程序开发者来说,学会使用RenderDoc图形调试器可以帮助你全面了解渲染管线绑定的资源和运行状态,从而 ...
- websocket使用nginx代理后连接频繁打开和关闭
前几天开发了一个功能,使用websocket向前台发送消息,与前端联调时一切正常,但是发布到环境出现如下报错: 发现404,无法找到连接,突然想到环境上是走nginx代理的,应该是nginx没有配置代 ...
- Mybatis框架基础入门(六)--动态sql
主要是通过mybatis提供的各种标签方法实现动态拼接sql. 1.if标签 <!-- 根据条件查询用户 --> <select id="queryUserByWhere& ...
- idea-中的Mark Diretory as的内容
Sources Root:告诉idea这个文件夹及其子文件夹中包含源代码,是需要编译构建的一部分 Test Sources Root:测试源文件夹允许您将与测试相关的代码与生产代码分开.通常,源和测试 ...
- 学习 Haproxy (二)
1. Haproxy介绍 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备.虚拟主机.基于TCP和HTTP应用代理等功能.其配置简单,而且拥有很好的对服务器节点的 ...
- 3.Spark设计与运行原理,基本操作
1.Spark已打造出结构一体化.功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能. Spark生态系统主要包含Spark Core.Spark SQL.Spark St ...
- python学习笔记(四)——面向对象编程
python 支持面向过程编程和面向对象编程. 传统面向过程编程,也叫函数式编程,通过我们的需求设计成一个一个的函数来完成,对一些小规模程序来说面向过程确实简单方便不少.而随着互联网的发展,对于一些大 ...