首页 > 其他分享 >树结构练习——判断给定森林中有多少棵树

树结构练习——判断给定森林中有多少棵树

时间:2022-12-21 12:34:57浏览次数:62  
标签:pre count 树结构 int 练习 while 给定 root Find


                                                                   树结构练习——判断给定森林中有多少棵树


Time Limit: 1000MS Memory Limit: 65536KB


​Submit​​​ ​​​ Statistic​


Problem Description


 


Input


第一行包含两个整数n,m,表示该份代码中的n个类和m个单继承关系。



后面m行,每行两个整数a b,表示a是b的直接基类。


Output


 


Example Input


2 1 1 2 2 0


Example Output


1 2


Hint

#include <stdio.h>

#include <string.h>

int pre[123];

void initial(int n)

{

for(int i=0;i<=n;i++)

{

pre[i] = i;

}

}



int Find(int root)

{

int a = root;

while(root!=pre[root])

{

root = pre[root];

}

while(pre[a]!=root)

{

int temp = pre[a];

pre[a] = root;

a = temp;

}

return root;

}

int Count(int n)

{

int count=0;

for(int i=0;i<=n;i++)

{

int root = Find(i);

if(root)

{

count++;

pre[root] = 0;

}

}

return count;

}

void Join(int a,int b)

{

int root_a = Find(a);

int root_b = Find(b);

if(root_a!=root_b)

{

if(root_a<root_b)

{

pre[root_a] = root_b;

}

else

{

pre[root_b] = root_a;

}

}

}

int main()

{

int n,m;

while(~scanf("%d%d",&n,&m))

{

initial(n);

while(m--)

{

int u,v;

scanf("%d%d",&u,&v);

Join(u,v);

}

printf("%d\n",Count(n));

}

return 0;

}

标签:pre,count,树结构,int,练习,while,给定,root,Find
From: https://blog.51cto.com/u_12606187/5959798

相关文章

  • [js] 树结构查找节点,深度优先
    查找节点其实就是一个遍历的过程,遍历到满足条件的节点则返回,遍历完成未找到则返回null。类似数组的find方法,传入一个函数用于判断节点是否符合条件,代码如下:functiontreeFin......
  • 蓝桥杯今日份练习
    一、题目:给出一个n*m的整数矩阵,请你把这个矩阵顺时针旋转90°以后输出。输入格式:第一行输入两个整数n,m(1<=n,m<=200).用空格隔开。接下来n行,每行输入m个整数,表示输入的矩阵......
  • 树结构系列(三):B树、B+树
    平衡二叉树的查找效率是非常高的,并可以通过降低树的深度来提高查找的效率。但是当数据量非常大,树的存储的元素数量是有限的,这样会导致二叉查找树结构由于树的深度过大而造成......
  • 入门练习4-17
    太简单,不知道出题者的目的是什么#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){inta,i;printf("n的值:");scanf("%d",&a);for(i=1;i<=a;......
  • 【C语言】指针的安全、指针的练习、学习指针。
     ......
  • 入门练习4-16
    这题很简单,也是余数,余数0就是偶,非0是奇数,需要注意是小于等于输入,因为题目输入15显示了15,#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){inta,i;print......
  • 【C语言】进阶指针Ⅵ 指针和数组练习。
     ......
  • 蓝桥杯今日份练习
    一、题目相信小伙伴们都学过斐波那契数列,它是这样一个数列:1,1,3,5,8,13,21…………用f(n)表示斐波那契数列的第n项,则有:f1=f2=1,fn=fn-1+fn-2(n>2).输入一个n,求出fn对10的9次方+7......
  • 入门练习4-11
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){intno;do{printf("请输入一个正整数");scanf("%d",&no);if(no<=0)printf("请......
  • 入门练习4-12
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){intno;intnum=0;do{printf("请输入一个正整数:");scanf("%d",&no);if(no<=0)......