判断给定的一系列边是否能组成一棵树

根据树的定义,空树或满足特定条件的边集合可以组成树。题目要求判断一系列边是否能组成一棵树,条件包括:唯一根节点、每个节点唯一入边及从根到节点的唯一路径。可以通过并查集或拓扑排序方法来实现判断,其中树的节点数等于边数加1。C++实现未给出。
摘要由CSDN通过智能技术生成

题目大意:树的的定义为:

1. 空树(null,void,nothing),或者

2. 一个或多直接相连的边满足一下特性:

1)只有一个称为根(root)的节点,没有任和边指向它;

2)除了根节点,每个节点都有唯一一条边指向它;

3)每个节点都存在从根节点到到达它的唯一一条路径。

九度OJ链接:http://ac.jobdu.com/problem.php?pid=1481

分析:本题给出的是一系列树的边集合,需要判断这些边集合是否能够组成一棵树,每个树中的节点(除了root)都只有一条边指向它。要同时满足上面三条特性。树的节点数一定等于边的个数加1。可通过并查集实现,同时还可以通过拓扑排序的方法。

C++实现:

#include <iostream>
#include <stdio.h>
#include <vector>
#include <memory.h>
using namespace std;

int hash[10005];
bool visited[10005];
int id;

void init()
{
	for(int i = 0; i < 10005; i ++)
	{
		hash[i] = i;
		visited[i] = false;
	}
}

int func(int x)
{
	if(hash[x] == x)
		return x;
	return hash[x] = func(hash[x]);
}

void in
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值