首页 > 编程语言 >南沙C++信奥赛老师解一本通题 1385:团伙(group)

南沙C++信奥赛老师解一本通题 1385:团伙(group)

时间:2024-11-12 10:21:38浏览次数:1  
标签:right group int 信奥赛 findParent 通题 etree 敌人 left

【题目描述】

在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足:

1、我朋友的朋友是我的朋友;

2、我敌人的敌人是我的朋友;

所有是朋友的人组成一个团伙。告诉你关于这n个人的m条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能有多少个团伙?

【输入】

第1行为n和m,1<n<1000,1<=m<=100 000;

以下m行,每行为p x y,p的值为0或1,p为0时,表示x和y是朋友,p为1时,表示x和y是敌人。

【输出】

一个整数,表示这n个人最多可能有几个团伙。

【输入样例】

6 4
1 1 4
0 3 5
0 4 6
1 1 2

【输出样例】

3

 

#include <iostream>
using namespace std;
int ftree[10001],etree[10001];		//friendtree enemytree
int findParent(int x)
{
	return ftree[x]==x? x: findParent( ftree[x] ); //如果x的结点的根就是自己,直接返回,否则递归找其父结点
}
int main()
{
	int n,m,x,y,p,ans=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		ftree[i]=i;
	for(int i=1;i<=m;i++)
	{
		cin>>p>>x>>y;
		if(p==0)	//为朋友时 
		{
			int left=findParent(x);
			int right=findParent(y);
			ftree[right]=left;
		}
		else	//敌人时,则合并敌人的 
		{
			if(etree[x]==0)	//x还没有敌人时,让y为敌人团队首领 
				etree[x]=y;
			else	//敌人的 敌人是朋友,他们是一伙人 
			{
				int left=findParent( etree[x] ); //查找 敌人团队首领 	
				int right=findParent( y );//查找 另一个敌人首领 
				ftree[right]=left;
			}
			
			if(etree[y]==0)  //y还没有敌人时,让x为敌人团队首领 
				etree[y]=x;
			else
			{
				int left=findParent( etree[y] );
				int right=findParent(x);
				ftree[right]=left;
			}
		}
	}
	for(int i=1;i<=n;i++)
		if(ftree[i]==i)
			ans++;
	cout<<ans;
	return 0;
}

 

标签:right,group,int,信奥赛,findParent,通题,etree,敌人,left
From: https://www.cnblogs.com/nanshaquxinaosai/p/18541256

相关文章

  • FreeRTOS 24:事件组EventGroup等待、清零、获取操作
    等待事件标志位xEventGroupWaitBits()既然标记了事件的发生,那么我怎么知道他到底有没有发生,这也是需要一个函数来获取事件是否已经发生,FreeRTOS提供了一个等待指定事件的函数——xEventGroupWaitBits(),通过这个函数,任务可以知道事件标志组中的哪......
  • salesforce零基础学习(一百四十一)刷新dev sandbox需要强制group
    本篇参考:https://help.salesforce.com/s/articleView?id=sf.data_sandbox_selective_access.htm&type=5背景:最近同事刷新sandbox发现点击create不生效,并且无任何提示(后续可能优化)。习惯了直接创建或者刷新的老司机们可能看不出来SandboxAccess标红提示来着,恰巧当前的org还没有......
  • 被 AT ... END AT 等 AT 语法搞懵了?试试这个 LOOP AT Groups 语法
    在本篇文章中,您将了解到在7.40中引入的LOOPAT…GROUPBY语句。该语句可以代替ATNEW...ENDAT语句。您可以参阅SCNwikiControlLevelStatementsinABAP-ABAPDevelopment-CommunityWiki(sap.com)了解AT...ENDAT控制层语句。简而言之,有4条AT......
  • Prometheus Alert Manager -- Difference between group_wait, group_interval, and r
    Definitiongroup_interval:group_interval dictateshowlongtowaitbeforesendingnotificationsaboutnewalertsthatareaddedtoagroupofalertsthathavebeenalertedonbefore。repeat_interval:IfthereisnothingchangeintheAlertGroup......
  • 系统变量group_replication_group_seeds为空导致MySQL节点无法启动组复制
    MySQLInnoDBCluster集群中一个节点,在服务器重启过后,启动MySQL实例后,发现status为MISSING,另外memberState为OFFLINE状态。如下所示: MySQL  mysqldbu02:7306 ssl  JS > cluster.status(){    "clusterName": "yssps",     "defaultReplicaSet": {      ......
  • odoo中对多条数据按条件进行分类汇总 read_group的用法总结并抽取出公式
    今天在工作中遇到一个这样的问题。要求:做一个打印模板实现下面图中的分类汇总 py3o://for="oinobject.delivery_containers_line.read_group(domain=[('delivery_order_id','=',object.id)],fields=['customer_id','delivery_order_id','sales_order_......
  • 南沙C++信奥赛陈老师解一本通题 1225:金银岛
    ​ 【题目描述】某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有ss个种类,每种金属重量不同,分别为n1,n2,...,nsn1,n2,...,ns,同时每个种类......
  • CSP/信奥赛C++完整学习规划(价值2万的csp-j完整课程体系)
    CSP/信奥赛C++课程完整学习视频一站式掌握信奥赛知识冲刺信奥赛拿奖课程购买后永久学习,不受限制!阶段一:《信奥赛C++语法基础》课程目标:轻松入门C++语法课程链接:https://edu.csdn.net/course/detail/39557阶段二:《信奥赛C++语法进阶》课程目标:快速进阶C++语法......
  • Android的自定义View和自定义ViewGroup
    Android自定义视图(View)和视图组(ViewGroup)详解在Android开发中,有时候我们需要创建一些标准控件无法满足需求的自定义视图(View)和视图组(ViewGroup)。本文将详细介绍如何创建自定义视图和视图组,包括构造方法、自定义属性、绘制逻辑、测量逻辑、布局逻辑和设置布局参数等内容。1.......
  • group by | order by| distribute by| sort by| cluster by | partition by 的区别
    目录1、orderby 和groupby1.1、orderby:排序,属于全局排序1.2、goupby:分区2、distributeby、sortby、clusterby、partitionby2.1、distributeby:分组2.2、sortby: 强制排序2.3、partitionby:分组2.4、clusterby:(culsterby =distributeby......