题目链接
题目分析:
1、结点序号不是严格按顺序排列的!
2、有空树的情况(即只输入: 0 0),不判断会WA
解题思路(一):
判断是否 只有一个集合 且 没有回路(路径条数 >= 节点数)
AC程序(C++):
/**************************
*@Author: 3stone
*@ACM: HDU.1272 小希的迷宫
*@Time: 18/6/12
*@IDE: VS Code
***************************/
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 100005
using namespace std;
int far[maxn]; //并查集
bool exit_flag[maxn]; //记录结点是否已经出现
int sum_of_set; //集合数
int num_of_road, num_of_node; //路径数,节点数
//初始化
void initiate(int n) {
for (int i = 0; i < n; i++)
far[i] = i;
}
//查找根节点(迭代版)
int find_root(int a) {
int root = a;
while(root != far[root])
root = far[root];
//路径压缩(再回溯一遍,把走过结点的父节点全部赋值为根结点)
while(a != far[a]) {
int z = a;
a = far[a];
far[z] = root;
}
return root;
}
//合并集合
void Union(int a, int b) {
a = find_root(a);
b =