首页 > 编程语言 >广州C++信奥赛老师解一本通题 1389:亲戚

广州C++信奥赛老师解一本通题 1389:亲戚

时间:2024-09-25 12:47:21浏览次数:1  
标签:结点 return int 信奥赛 findParent tree 亲戚 通题 C++

 【题目描述】

若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的某个人所在家族的人数。

规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。

【输入】

第一行:三个整数n,(n≤100,000,m≤200,000),分别表示有n个人,m个信息。

以下m行:信息包含两种形式:

M a b:表示a和b具有亲戚关系。

Q a:要求输出a所在家族的人数。

【输出】

要求输出a所在家族的人数。

【输入样例】

5 10
M 3 2
Q 4
M 1 2
Q 4
M 3 2
Q 1
M 3 1
Q 5
M 4 2
Q 4

【输出样例】

1
1
3
1

 

#include <bits/stdc++.h>
using namespace std;
int tree[100001],member[100001],n,m,q,x,y;
int findParent(int x)
{
	///return tree[x]==x? x: findParent( tree[x] ); //如果x的结点的根就是自己,直接返回,否则递归找其父结点 
	if(tree[x]==x) //如果x的结点的根就是自己,
		return x;
	else
	{
		tree[x]=findParent( tree[x] );//路径压缩,否则有2个过,结点不存父结点,直接存放根结点 
		return tree[x];
	}  
}
int main()
{
	char c;
	char s[10];
	scanf("%d%d",&n,&m); 
	for(int i=1;i<=n;i++)
	{
		tree[i]=i;
		member[i]=1;       //刚开始结点的成员数为1 
	}
	for(int i=1;i<=m;i++)
	{
		scanf(" %c",&c);//注意%c前面有个回车 
		if(c=='M') //合并操作 
		{
			scanf("%d%d",&x,&y);	
			int left=findParent(x);
			int right= findParent(y); 	
				tree[ right ]=  left;	//将右边的根挂到左边的根 
			if(left!=right)  //父结点不同,则合并家族成员数量 
				member[ left ]+= member[ right ];	
		}
		else //输出操作 
		{
			scanf("%d",&x);
			printf("%d\n",member[findParent(x)]);
		}
	}
	return 0;
}

 

标签:结点,return,int,信奥赛,findParent,tree,亲戚,通题,C++
From: https://www.cnblogs.com/nanshaquxinaosai/p/18431101

相关文章

  • C++考试题-9道编程题运算符重载带部分答案
    【1】写出下列程序的运行结果。#include<iostream>   usingnamespacestd;classA{public:   A(inti):x(i)   { }   A(){x=0;}   friendAoperator++(Aa);   friendAoperator--(A&a);   voidprint();private:   i......
  • C++考试题带部分答案函数模板
    【1】写出下面程序的运行结果。#include<iostream>   usingnamespacestd;template<classType1,classType2>classmyclass{public:myclass(Type1a,Type2b){i=a;j=b;}voidshow(){cout<<i<<′′<<j<<′\n′;}private:Type1i;T......
  • C++模拟真人鼠标轨迹
    一.API跨语言平台支持`鼠标轨迹API`[https://winsdk.cn/]()底层实现采用C/C++语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼容性。通过DLL封装,开发者可以在C++、Pytho......
  • QT C++ 自学积累 『非技术文』
    QTC++自学积累『非技术文』最近一段时间参与了一个QT项目的开发,使用的是C++语法,很遗憾的是我之前从来没有接触过C++,大学没有开过这堂课,也没用自己学习过,所有说上手贼慢,到现在为止其实也不是很清楚具体的开发技巧,毕竟是参与,东一复制西一粘贴的,就拉倒了。里面用到了很多......
  • 【C++】vector-1
    文章目录1.vector的介绍及使用1.1vector的介绍1.2vector的使用1.2.1vector的定义1.2.2vectoriterator的使用1.2.3vector空间增长问题1.2.4vector增删查改1.vector的介绍及使用1.1vector的介绍1.vector是表示可变大小数组的序列容器。2.就像数组一样,vec......
  • C++模拟真人鼠标轨迹
    一.API跨语言平台支持鼠标轨迹API底层实现采用C/C++语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼容性。通过DLL封装,开发者可以在C++、Python、易语言、按键精......
  • onnxruntime c++ 推理例子
    资源释放的问题。onnxruntime的对象release是无效的,从接口源码上只是将指针赋空。并未实际释放。要实现释放,需要以指针形式实现。一个例子如下:#include<onnxruntime_cxx_api.h>voidtestimage(){Matimage=imread("ae14.jpg",IMREAD_UNCHANGED); //创建会话选项 O......
  • C++: unordered系列关联式容器
    目录1.unordered系列关联式容器1.1unordered_map1.2unordered_set2.哈希概念3.哈希冲突4.闭散列5.开散列博客主页:酷酷学感谢关注!!!正文开始1.unordered系列关联式容器在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到......
  • C++ Practical-1 day6
    系列文章目录点击直达——文章总目录文章目录系列文章目录C++Practical-1day6Overview1.abstract_class抽象类1.1.抽象类的特点1.2.示例:抽象类1.3.注意事项2.virtual_function虚函数2.1.示例:动物叫声的多态性2.2.示例:计算图形的面积2.3.注意事项关于作者C+......
  • 自梳理C++八股
    1.左右值引用的理解回答:“左右值引用是C++11引入的一项重要特性,用于优化资源管理和提升性能。具体来说:左值引用(LvalueReference):左值引用可以类比为对象的别名,它允许多个引用共享一个实体对象,常用于函数参数传递以避免对象拷贝。左值引用只能绑定到一个命名的持久对象,适合用......