竞赛课第五周(并查集+Treap树的应用)

目的:

(1)熟悉并掌握并查集的应用

(2)熟悉并掌握BST

(3)熟悉并掌握Treap树的建立与应用

实验内容:

1.并查集 poj 1611 嫌疑人

严重急性呼吸系统综合症 (SARS) 是一种病因不明的非典型肺炎,于 2003 年 3 月中旬被公认为全球威胁。为了尽量减少传染给他人,最好的策略是将嫌疑人与其他人分开。
在不传播疾病大学 (NSYSU) 中,有许多学生团体。同组的学生经常互相交流,一个学生可以加入多个组。为防止SARS的可能传播,南洋大学收集了所有学生团体的成员名单,并在其标准操作程序(SOP)中制定了以下规则。
一旦组中的成员成为嫌疑人,则该组中的所有成员都是嫌疑人。
然而,他们发现,当一名学生被认定为嫌疑人时,要识别所有嫌疑人并不容易。你的工作是编写一个找到所有嫌疑人的程序。

输入

输入文件包含几种情况。每个测试用例以一行中的两个整数 n 和 m 开头,其中 n 是学生数,m 是组数。您可以假设 0 < n <= 30000 和 0 <= m <= 500。每个学生都由一个介于 0 和 n-1 之间的唯一整数编号,最初学生 0 在所有情况下都被识别为嫌疑人。这一行后面是 m 个组的成员列表,每组一行。每行都以一个整数 k 开始,它本身表示组中的成员数。在成员数量之后,有 k 个整数代表该组中的学生。一行中的所有整数至少用一个空格分隔。
n = 0 和 m = 0 的情况表示输入结束,不需要处理。

输出

对于每个案例,在一行中输出嫌疑人的数量。

样本输入

100 4

2 1 2

5 10 13 11 12 14

2 0 1

2 99 2

200 2

1 5

5 1 2 3 4 5

1 0

0 0

样本输出

4

1

1

(oj未过)

#include <bits/stdc++.h>
using namespace std;

int a[30000];

int find(int index)//路径压缩&查找
{
    if(a[index] == index)
        return index;
    return a[index] = find(a[index]);
}

int main()
{
	while(1)
	{
		int suspect = 0;
		int n, m;//n 是学生数,m 是组数
		cin>>n>>m;
		if(n == 0 && m == 0)
			return 0;
			
		for(int i=0;i<n;i++)
		{
			a[i] = i; //初始化
		}
		
		for(int i=0;i<m;i++)//m组
		{
			int k;
			cin>>k;//组中的成员数
			int x1, x2;
			cin>>x1; //先读一个,因为k未必是双数
			for(int j=1;j<k;j++)
			{
				cin>>x2; //再读一个
				int boss1 = find(x1);
				int boss2 = find(x2);
				if(boss1 != boss2)
        			a[boss1] = boss2;
			}
		}
		
		//a[0]是嫌疑人,a[i] == a[0]即可找到人数
		for(int i=0;i<n;i++)
		{
			if(a[i] == a[0])
				suspect++;
		}
		cout << "suspect: " << suspect << endl;
	}
	
	
}
/*
100 4
2 1 2
5 10 13 11 12 14
2 0 1
2 99 2
200 2
1 5
5 1 2 3 4 5
1 0
0 0
*/

【运行结果】

2.  Treap树的应用 hdu 4585 Shaolin

少林寺的第一个和尚是方丈,作为功夫大师,他规定每个加入少林的年轻和尚,要选一个老和尚来一场功夫战斗。每个和尚有一个独立的id和独立的战斗等级grade,新和尚可以选择跟他的战斗等级最接近的老和尚战斗。

方丈的id是1,战斗等级是109。他丢失了战斗记录,不过他记得和尚们加入少林的早晚顺序。请帮他恢复战斗记录。

输入:第一行是一个整数n,0 <n <=100,000,和尚的人数,但不包括大师本人。下面有n行,每行有两个整数k,g,表示一个和尚的id和战斗等级,0<= k ,g<=5,000,000。和尚以升序排序,即按加入少林的时间排序。最后一行用0表示结束。

输出:按时间顺序给出战斗,打印出每场战斗中新和尚和老和尚的id。

样例输入:

3

2 1

3 3

4 2

0

样例输出:

2 1

3 2

4 2

#include <bits/stdc++.h>
using namespace std;

map<int, int> mp;
const int BuddhistAbbot = 1e9; //方丈等级

int main()
{
	int n;
	while(1)
	{
		cin>>n;
		if(n == 0)
			return 0;
		mp.clear();
		mp[BuddhistAbbot] = 1; //方丈
		while(n--)
		{
			int id, grade;
			cin>>id>>grade;
			mp[grade] = id;
			int ans;
			map<int, int>::iterator it = mp.find(grade);
			if(it == mp.begin())
				ans = (++it)->second;
			else
			{
				map<int, int>::iterator it2 = it;
				it2--;
				it++;
				//比较grade点上下连着的两个和尚,看看哪个差值更小
				if(abs(grade-(it2->first)) <= abs(grade-(it->first)))
					ans = it2->second;
				else
					ans = it->second;
			}
			cout << "fight: new monk:"<< id << " old monk:" << ans << endl;
		
		}
	}
}

/*
3
2 1
3 3
4 2
0
*/

【运行结果】

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/506241.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

书生·浦语大模型-第一节课笔记

视频总结 23年发布的模型在一些材料中归位指令微调模型&#xff0c;后面逐渐升级应该已经是train的模型了 技术报告总结 InternLM2 Technical Report 评测与特点 6 dimensions and 30 benchmarks, long-context modeling, and open-ended subjective evaluations长文本…

智能革命:ChatGPT3.5与GPT4.0的融合,携手DALL·E 3和Midjourney开启艺术新纪元

迷图网(kk.zlrxjh.top)是一个融合了顶尖人工智能技术的多功能助手&#xff0c;集成了ChatGPT3.5、GPT4.0、DALLE 3和Midjourney等多种智能系统&#xff0c;为用户提供了丰富的体验。以下是对这些技术的概述&#xff1a; ChatGPT3.5是由OpenAI开发的一个自然语言处理模型&#x…

设计模式学习笔记 - 设计模式与范式 -行为型:2.观察者模式(下):实现一个异步非阻塞的EventBus框架

概述 《1.观察者模式&#xff08;上&#xff09;》我们学习了观察者模式的原理、实现、应用场景&#xff0c;重点节介绍了不同应用场景下&#xff0c;几种不同的实现方式&#xff0c;包括&#xff1a;同步阻塞、异步非阻塞、进程内、进程间的实现方式。 同步阻塞最经典的实现…

springboot配置文件application.properties,application.yml/application.yaml

application.properties Springboot提供的一种属性配置方式&#xff1a;application.properties 初始时配置文件中只有一行语句。 启动时&#xff0c;比如tomcat的端口号默认8080&#xff0c;路径默认。如果我们要改变端口号及路径之类的可以在application.properties中配置。…

基于微信小程序的自习室预约系统的设计与实现

基于微信小程序的自习室预约系统的设计与实现 文章目录 基于微信小程序的自习室预约系统的设计与实现1、前言介绍2、功能设计3、功能实现4、开发技术简介5、系统物理架构6、系统流程图7、库表设计8、关键代码9、源码获取10、 &#x1f389;写在最后 1、前言介绍 伴随着信息技术…

ESP8266 WiFi物联网智能插座—上位机软件实现

1、软件架构 上位机主要作为下位机数据上传服务端以及节点调试的控制端&#xff0c;可以等效认为是专属版本调试工具。针对智能插座协议&#xff0c;对于下位机进行可视化监测和管理。 软件技术架构如下&#xff0c;主要为针对 Windows 的PC 端应用程序&#xff0c;采用WPF以及…

pyqt 创建右键菜单栏

class MainModule(QMainWindow, Ui_MainWindow):def __init__(self):super().__init__(parentNone)self.setupUi(self)# 允许出现菜单栏self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)# 对空间添加右键菜单栏处理 self.tableWidget.customContextMenuRequested.…

C练习题(1)

变种水仙花&#xff08;来自牛课网&#xff09; 题目 变种水仙花数 - Lily Number&#xff1a;把任意的数字&#xff0c;从中间拆分成两个数字&#xff0c;比如1461 可以拆分成&#xff08;1和461&#xff09;,&#xff08;14和61&#xff09;,&#xff08;146和1),如果所有拆…

【Web】NSSCTF Round#20 Basic 两道0解题的赛后谈

目录 前言 baby-Codeigniter 组合拳&#xff01; 前言 本想着说看看go的gin框架就睡了的&#xff0c;r3师傅提醒说赛题环境已经上了&#xff0c;那不赶紧研究下&#x1f600; 主要来谈谈做题的心路历程 baby-Codeigniter 拿到题目的第一反应应该是&#xff1a;“什么是C…

[ESP32]:基于esp-modbus实现serial主机

[ESP32]&#xff1a;基于esp-modbus实现serial主机 开发环境 esp idf 5.1esp-modbus 1.0.13 使用如下指令添加组件&#xff0c;或者访问esp-modbus idf.py add-dependency "espressif/esp-modbus^1.0.13"Device parameters 对于master而言&#xff0c;需要理解的…

五、Yocto集成QT5(基于Raspberrypi 4B)

Yocto集成QT5 本篇文章为基于raspberrypi 4B单板的yocto实战系列的第五篇文章&#xff1a; 一、yocto 编译raspberrypi 4B并启动 二、yocto 集成ros2(基于raspberrypi 4B) 三、Yocto创建自定义的layer和image 四、Yocto创建静态IP和VLAN 本章节实操代码请查看github仓库&…

CVAE——生成0-9数字图像(Pytorch+mnist)

1、简介 CVAE&#xff08;Conditional Variational Autoencoder&#xff0c;条件变分自编码器&#xff09;是一种变分自编码器&#xff08;VAE&#xff09;的变体&#xff0c;用于生成有条件的数据。在传统的变分自编码器中&#xff0c;生成的数据是完全由潜在变量决定的&…

GridLayoutManager 中的一些坑

前言 如果GridLayoutManager使用item的布局都是wrap_cotent 那么会在布局更改时会出现一些出人意料的情况。&#xff08;本文完全不具备可读性和说教性&#xff0c;仅为博主方便查找问题&#xff09; 布局item: <!--layout_item.xml--> <?xml version"1.0&qu…

论文阅读: Visual Attention Network

Motivation 自注意力机制在2D自然图像领域面临3个挑战&#xff1a; 视二维图像为一维序列。对于高分辨率图像&#xff0c;二次复杂度消耗太大。只捕捉空间适应性&#xff0c;忽略通道适应性。 Contribution 设计了 Large Kernel attention(LKA)&#xff0c;包含卷积和自注意…

SpringBoot整合knife4J 3.0.3

Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目。项目正式更名为knife4j,取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍,更名也是希望把她做成一个为Swagger接口文档服务的通用性解决方案,不仅仅只是专注于前端Ui…

受益于边缘计算的三个关键应用

边缘计算和 5G 网络正在改变物联网&#xff0c;增强跨多个领域的广泛应用的功能&#xff0c;并催生大量新兴应用。我们通过研究三个突出的用例来说明边缘计算的强大功能。 工业4.0智能工厂 工业 4.0 为制造商提供了基于灵活的工业环境提高生产力和盈利能力的愿景&#xff0c;…

5.vector容器的使用

文章目录 vector容器1.构造函数代码工程运行结果 2.赋值代码工程运行结果 3.容量和大小代码工程运行结果 4.插入和删除代码工程运行结果 5.数据存取工程代码运行结果 6.互换容器代码工程运行结果 7.预留空间代码工程运行结果 vector容器 1.构造函数 /*1.默认构造-无参构造*/ …

STM32 can通信部分函数注释

相关截图: CAN模式初始化函数:u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode) //CAN初始化 //tsjw:重新同步跳跃时间单元.范围:CAN_SJW_1tq~ CAN_SJW_4tq //tbs2:时间段2的时间单元. 范围:CAN_BS2_1tq~CAN_BS2_8tq; //tbs1:时间段1的时间单元. 范围:CAN_BS…

IO流c++

IO流类库 输入输出流 #include <iostream> using namespace std;class InCount { public:InCount(int a 0, int b 0){c1 a;c2 b;}void show(void){cout << "c1" << c1 << "\t" << "c2" << c2 << …

PHP三种方式读取RSA密钥加解密、签名验签完整教程

目录 第一步、生成公私钥 第二步、三种方式读取RSA密钥 第1种&#xff1a;公私钥弄成一行&#xff0c;必须一行没有空格和换行 第2种&#xff1a;直接复制生成公私钥 第3种;复制密钥存储为.pem文件后缀 第三步、RSA加解密 第四步、RSA签名以及验证签名 第五步、封装完整…