【Lintcode】444. Graph Valid Tree II
题目地址:
https://www.lintcode.com/problem/444/
要求设计一个数据结构,可以做如下两个操作:
1、void addEdge(int a, int b)
在aaa与bbb两个点之间连边;
2、bool isValidTree()
问当前的图是否是一棵树。
由于不知道aaa和bbb的取值范围,可以采用离散化的方式,动态开点。总体思路是并查集。询问的时候只需要看一下是否集合个数是111并且没有环,可以用一个变量记录集合个数,另一个变量记录是否有环。代码如下:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Solution {List<Integer> p;Map<Integer, Integer> map;// group是集合个数int idx, group;// isValid记录是否无环boolean isValid;public Solution() {p = new ArrayList<>();map = new HashMap<>();isValid = true;}int find(int x) {if (x != p.get(x)) {p.set(x, find(p.get(x)));}return p.get(x);}void union(int x, int y) {int px = find(x), py = find(y);if (px == py) {// 有环了,标记一下isValid = false;return;}p.set(px, py);group--;}/*** @param a: the node a* @param b: the node b* @return: nothing*/public void addEdge(int a, int b) {// write your code here// 动态开点if (!map.containsKey(a)) {group++;p.add(idx);map.put(a, idx++);}if (!map.containsKey(b)) {group++;p.add(idx);map.put(b, idx++);}int x = map.get(a), y = map.get(b);union(x, y);}/*** @return: check whether these edges make up a valid tree*/public boolean isValidTree() {// write your code herereturn isValid && group == 1;}
}
加边时间复杂度O(log∗n)O(\log ^*n)O(log∗n),nnn是已经加的点的个数,查询时间O(1)O(1)O(1),空间O(n)O(n)O(n)。
【Lintcode】444. Graph Valid Tree II相关推荐
- 【SPOJ】Count On A Tree II(树上莫队)
[SPOJ]Count On A Tree II(树上莫队) 题面 洛谷 Vjudge 洛谷上有翻译啦 题解 如果不在树上就是一个很裸很裸的莫队 现在在树上,就是一个很裸很裸的树上莫队啦. #incl ...
- 【Lintcode】1354. Pascal‘s Triangle II
题目地址: https://www.lintcode.com/problem/pascals-triangle-ii/description 计算杨辉三角的第nnn行,从000开始计数.用两个list ...
- 【LeetCode】图论 graph(共20题)
[133]Clone Graph (2019年3月9日,复习) 给定一个图,返回它的深拷贝. 题解:dfs 或者 bfs 都可以 1 /* 2 // Definition for a Node. 3 ...
- 【LeetCode】剑指 Offer 55 - II. 平衡二叉树
[LeetCode]剑指 Offer 55 - II. 平衡二叉树 文章目录 [LeetCode]剑指 Offer 55 - II. 平衡二叉树 一.后序遍历 + 剪枝(从底至顶) 一.后序遍历 + ...
- 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先
[LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...
- 【机器学习】决策树(Decision Tree)
[机器学习]k近邻算法(KNN) [机器学习]决策树(Decision Tree) [机器学习]朴素贝叶斯(Naive Bayes) 一.概述 决策树(Decision Tree)是有监督学习中的一种 ...
- 【LeetCode】剑指 Offer 59 - II. 队列的最大值
[LeetCode]剑指 Offer 59 - II. 队列的最大值 文章目录 [LeetCode]剑指 Offer 59 - II. 队列的最大值 package offer;import java ...
- 【LeetCode】剑指 Offer 58 - II. 左旋转字符串
[LeetCode]剑指 Offer 58 - II. 左旋转字符串 文章目录 [LeetCode]剑指 Offer 58 - II. 左旋转字符串 一.字符串切片 二.列表遍历拼接 三.字符串遍历拼 ...
- 【LeetCode】剑指 Offer 32 - II. 从上到下打印二叉树 II
[LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 文章目录 [LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 一.层序遍历 BFS 一. ...
最新文章
- OSPF高级设置实现全网互通
- 一份 Spring Boot 项目搭建模板
- 图解 Java 垃圾回收机制,写得非常好!
- Grunt-几个常用的任务配置,加载,执行的写法
- django_models_关系一对多
- 动态规划原理介绍(附7个算例,有代码讲解)
- linux空文件夹大小,[转载]linux 查看文件和文件夹大小
- arm poky linux,Solved: Re: arm-poky-linux - NXP Community
- React和Vue的模块化
- 一本名不符实的.NET书籍: Game Engine Toolset Development
- 移动物联卡资费标准是如何的
- 为什么会找不到D层文件?
- php自动生成word目录,word怎么自动生成目录
- 2022年自动化专业、电气工程及其自动化专业大学生可以参加哪些专业相关的竞赛?
- 挑战微软 + GitHub!谷歌联手 Replit,升级 AI 编程“神器”:曾拒绝微软 10 亿美元的收购...
- 基于C语言的个人所得税计税系统
- “知识库系统”的一些思考
- Python调用百度API进行身份证识别
- 联想u310 u410已组好RAID即启用了IRST而因意外不能进入系统要(重装系统方法)
- c语言输出菱形for循环_c语言for循环如何打印菱形