题目大意:

  给你两个节点,前者指向后者(可以认为前者是后者的父节点),然后让你判断是否是一棵树。

解题思路:

  先说说这道题和小希的迷宫(HDU1272)那道题的区别,前者给出的两个点是有方向的,而后者是没有的,这就是唯一的区别。再者这道题其实就是让你判断所有的点最后所形成的图是否是一棵树。做这道题时错误了很多遍,细想之,主要是开始思路不好,很容易乱,理清思路让代码变得清晰起来就好了。判断一个图是否为一棵树。有三个重要条件(比小希的迷宫多了一个条件):

1:已经在一个集合里面的两个数不能再同时出现了(无环图)。

2:根节点只有一个(是树不是森林)。

3:除了根节点之外所有的节点的入度为一。

上面三个条件都满足了就是一颗树了,对于第一个条件,即判断是否新给的两个数的根节点是否相同。第二个条件最后统计一下根节点的数量是否小于2,(不是等于一,因为空树也是树,根节点为0~~~),第三个条件,可以观察观察数据,入度是指被指向的那个点,对于每次给定的两个数,后面那个数字出现的次数即是这个点的入度。所以可以用一个数组,利用下标代表这个点,利用值代表出现的次数。最后统计下看是否有出现次数大于一的。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <algorithm>
using namespace std;
const int MAXN = 1e5 + ;
int pre[MAXN]; //储存父节点
bool bol[MAXN]; //这个点是否出现过
int flag1 = ; //代表入度是否满足是一个树
int flag2 = ; //代表是否成环。
int cnt[MAXN]; //记录出现的点的入度 int Find(int x)
{
int r = x;
while(pre[r] != r)
{
r = pre[r];
}
int i = x,j;
while(pre[i] != r)
{
j = i;
i = pre[i];
pre[j] = r;
}
return r;
} void Mix(int a,int b)
{
int x = Find(a);
int y = Find(b);
if(x > y)
{
pre[x] = y;
}
if(x < y)
{
pre[y] = x;
}
} int Search()
{
int cnt = ;
for(int i = ; i <= MAXN; i++)
{
if(bol[i])
if(pre[i] == i)
cnt++;
}
return cnt;
} int main()
{
int M,N;
flag1 = ; //一大堆初始化0.0
flag2 = ;
for(int i = ; i <= MAXN; i++)
{
pre[i] = i;
bol[i] = false;
}
memset(cnt,,sizeof(cnt));
int kas = ;
while(~scanf("%d%d",&M,&N)&&(M != - || N != -))
{
bol[M] = true;
bol[N] = true;
cnt[N]++;
if(M != && N != )
{
int m = Find(M);
int n = Find(N);
if(m == n)
flag2 = ; //出现了环
Mix(M,N);
}
else
{
int single = Search(); //根节点的个数
for(int i = ; i <= MAXN;i++)
{
if(cnt[i] > )
flag1 = ; //有入度大于一的出现
}
if(single < && flag1 && flag2) printf("Case %d is a tree.\n",kas++); //三个条件都满足
else printf("Case %d is not a tree.\n",kas++);
flag1 = ;
flag2 = ;
for(int i = ; i <= MAXN; i++)
{
pre[i] = i;
bol[i] = false;
}
memset(cnt,,sizeof(cnt));
}
}
return ;
}

HDU 1325 Is It A Tree?(并查集)的更多相关文章

  1. Hdu.1325.Is It A Tree?(并查集)

    Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  2. hdu 1325 Is It A Tree? 并查集

    Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  3. hdu 5458 Stability(树链剖分+并查集)

    Stability Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)Total ...

  4. [HDU 3712] Fiolki (带边权并查集+启发式合并)

    [HDU 3712] Fiolki (带边权并查集+启发式合并) 题面 化学家吉丽想要配置一种神奇的药水来拯救世界. 吉丽有n种不同的液体物质,和n个药瓶(均从1到n编号).初始时,第i个瓶内装着g[ ...

  5. HDU 5606 tree 并查集

    tree 把每条边权是1的边断开,发现每个点离他最近的点个数就是他所在的连通块大小. 开一个并查集,每次读到边权是0的边就合并.最后Ans​i​​=size[findset(i)],size表示每个并 ...

  6. tree(并查集)

    tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  7. hdu 5652 India and China Origins 并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题目大意:n*m的矩阵上,0为平原,1为山.q个询问,第i个询问给定坐标xi,yi,表示i年后这 ...

  8. Is It A Tree?(并查集)

    Is It A Tree? Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26002   Accepted: 8879 De ...

  9. CF109 C. Lucky Tree 并查集

    Petya loves lucky numbers. We all know that lucky numbers are the positive integers whose decimal re ...

  10. hdu - 1829 A Bug's Life (并查集)&&poj - 2492 A Bug's Life && poj 1703 Find them, Catch them

    http://acm.hdu.edu.cn/showproblem.php?pid=1829 http://poj.org/problem?id=2492 臭虫有两种性别,并且只有异性相吸,给定n条臭 ...

随机推荐

  1. Intel QuickAssist Technology and OpenSSL – Benchmarks and Setup Tips

    Intel QuickAssist Technology and OpenSSL – Benchmarks and Setup Tips 来源:https://www.servethehome.com ...

  2. RDMA

    什么是RDMA? 来源 https://blog.csdn.net/u011459120/article/details/78469098 1. 概述 RDMA是Remote Direct Memor ...

  3. Word2010 自动生成二级编号

    http://jingyan.baidu.com/article/3ea5148901919752e61bbafe.html

  4. 洛谷 P2827 蚯蚓 解题报告

    P2827 蚯蚓 题目描述 本题中,我们将用符号 \(\lfloor c \rfloor\) 表示对 \(c\) 向下取整,例如:\(\lfloor 3.0 \rfloor = \lfloor 3.1 ...

  5. Event loop的macro task和micro task

    macrotask在一些文章中也被直接称为task. 一个宿主环境只有一个事件循环,但可以有多个任务队列.宏任务队列(macro task)与微任务队列(micro task)就是其中之二. 每次事件 ...

  6. “CNKI 中国知网 PDF 全文下载”油猴脚本在线安装地址

    https://greasyfork.org/zh-CN/scripts/18841-cnki-%E4%B8%AD%E5%9B%BD%E7%9F%A5%E7%BD%91-pdf-%E5%85%A8%E ...

  7. codeforces 1065D

    题目链接:https://codeforces.com/problemset/problem/1065/D 题意:给你一个又1~n^2组成的n行n列的矩阵,你可以走日字型,直线,斜线,现在要求你从1走 ...

  8. 解决perm size out of memeory的问题

    在idea中配置如下即可 -Xms1024m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=512m 如下图所示:

  9. BZOJ 2095: [Poi2010]Bridges

    2095: [Poi2010]Bridges Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 869  Solved: 299[Submit][Stat ...

  10. bzoj 1880 最短路

    我们首先知道,答案肯定是最短路图中的某段公共链,那么设(x,y)为x到y的最短路,那么答案为((s1,t1)+(s2,t2)-min((s1,s2)+(t1,t2),(s1,t2),(s2,t1))) ...