HDU 1829 A Bug's Life

标准化降水指数介绍 Mckee et al.(1993)认为降水量的减少是导致干旱的主要因素,其他气候因子一般变化较小,对干旱产生的影响不大,因此SPI使用降水量作为唯一参数。SPI能较好表达因降水量的大小反映干旱状况,操作简单,所需资料仅为降水量,同时该干旱指数在各个地区和各个时段都具有良好的计算稳定性,是继PDSI之后另一种被广泛应用的干旱指数。𝐻(𝑥)是Γ分布求得的概率,并当𝐻(𝑥)>0.5时,S=1;式中,𝛼是形状参数,𝛽是尺度参数,𝑥是当月降水量,𝛤(𝛼)是Gamma函数,用极大似然估计法计算最佳的𝛼和𝛽,即。 阅读详情

传送门

带权并查集。题目先假设同性之间不发生性行为,然后给出很多对昆虫的性行为记录,问你从这些记录中能不能推得假设错误。

有两种方法,第一种方法思路简单,第二种方法类似POJ 1182。

这种题就是根据记录1 ~ i-1作为已知信息,判断当前记录i是否与之冲突。
其实判断的只是造成假设错误的充分条件,但这就已经符合题目要求了,也无法做更多判断。

(在第二种方法中思考这句话比较直观)其实,只有当该条记录的两点可以被之前记录的点连起来了(不仅仅是都出现过),才能真正地对这条记录作出判断。

1.

这种方法直接判断每条记录的两点是否同性。用并查集保存一个个集合,每个集合内性别相同。(不同集合之间性别关系未知,无法判断,即默认不冲突)

利用且只有利用情敌关系构建同性集合,情敌包括直接情敌和间接情敌,举一个间接情敌的例子:a和b是直接情敌、都连接d,b和c是直接情敌、都连接e,那么a和c就是间接情敌。

sex[]记录每个点的原配,所以把点x之后出现的对象都和原配sex[x] u一下就完事了。可以保证情敌关系(直接或间接)一定在一个集合内。

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;

const int MAXN = 2001;

int T, N, M;
int pre[MAXN];
int sex[MAXN];
bool flag;

void init()
{
	memset(pre, -1, sizeof pre);
	memset(sex, 0, sizeof sex);
	flag = false;
}

int f(int x)
{
	if (pre[x] < 0) return x;
	return pre[x] = f(pre[x]);
}

void u(int a, int b)
{
	int f1 = f(a);
	int f2 = f(b);
	if (f1 == f2) return;
	if (pre[f1] <= pre[f2])
	{
		pre[f1] += pre[f2];
		pre[f2] = f1;
	}
	else
	{
		pre[f2] += pre[f1];
		pre[f1] = f2;
	}
}

int main()
{
	int a, b;
	scanf("%d", &T);
	for (int i = 1; i <= T; i++)
	{
		init();
		scanf("%d%d", &N, &M);
		for (; M--;)
		{
			scanf("%d%d", &a, &b);
			if (flag) continue;
			if (f(a) == f(b))
			{
				flag = true;
				continue;
			}
			if (!sex[a]) sex[a] = b;
			else u(sex[a], b);
			if (!sex[b]) sex[b] = a;
			else u(sex[b], a);
		}

		printf("Scenario #%d:\n", i);
		if (flag) printf("Suspicious bugs found!\n\n");
		else printf("No suspicious bugs found!\n\n");
	}

	return 0;
}

2. 参考POJ 1182。

再写一种,这种方法的思想比较难写出来。我的理解,sign数组的意义是不确定的,有时指与父节点的一致情况,有时指与根节点的一致情况,当然,相对来说,其实都是指与父节点的一致情况。要搞清这个,关键在于理解find函数的递归过程,首先符合压缩规则这没问题,

sign[x] = (sign[x] + sign[pre[x]]) & 1;

这一句完成了sign意义的转化,sign[x]旧值指与父节点的一致情况(上一次被赋值时是直接指向根节点,然而当时的根节点已不是现在的根节点),sign[x]新值是指与根节点的一致情况,pre[x]在现在还是指父节点(马上下一句就变成根节点了),因为父节点在上次递归返回中已被直接指向根节点,所以sign[pre[x]]的意义及值也得到更新,所以sign[pre[x]]是指父节点与根节点的一致情况,所以,根据父节点过渡,负负得正,得到当前节点与根节点的一致情况。
所以,find函数先根据访问点层层上升直到根节点,然后从根节点下降,把沿途经过的每个结点直接指向根节点并赋予其正确的与根节点的一致情况。

接下来我说一说union/merge函数,之前我想的是,首先合并肯定不会涉及flag,合并是根1直接指向根2,那么根1及其子树可能都要变sign,然而,只用更新根1的sign就行了,因为每次查询根的时候都会把链粉碎并自上而下地赋予sign,所以只要保证子树的根 根1 的sign正确就行了。那么,原先的两个查询点n1 n2已经直接指向根1根2,且n1 n2一定不一致,根1到根2的一致情况也就可以通过下式确定了。

sign[f1] = (sign[n1] + sign[n2] + 1) & 1;

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;

const int MAXN = 2001;
int T, N, M;
int pre[MAXN];
int sign[MAXN];                                   // 0表示一致,1表示不一致
bool flag;

void init()
{
	memset(pre, -1, sizeof pre);
	memset(sign, 0, sizeof sign);
	flag = false;
}

int f(int x)
{
	if (pre[x] < 0) return x;
	int t = f(pre[x]);
	sign[x] = (sign[x] + sign[pre[x]]) & 1;       // 也可以写成 sign[x] ^ sign[pre[x]]
	return pre[x] = t;
}

void u(int n1, int n2)
{
	int f1 = f(n1);
	int f2 = f(n2);
	if (f1 == f2)
	{
		if (sign[n1] == sign[n2])
			flag = true;
		return;
	}
	if (pre[f1] <= pre[f2])
	{
		pre[f1] += pre[f2];
		pre[f2] = f1;
		sign[f2] = (sign[n1] + sign[n2] + 1) & 1; // 也可以写成 !(sign[n1] ^ sign[n2])
	}
	else
	{
		pre[f2] += pre[f1];
		pre[f1] = f2;
		sign[f1] = (sign[n1] + sign[n2] + 1) & 1;
	}
}

int main()
{
	int a, b;
	scanf("%d", &T);
	for (int i = 1; i <= T; i++)
	{
		init();
		scanf("%d%d", &N, &M);
		for (; M--;)
		{
			scanf("%d%d", &a, &b);
			if (flag) continue;
			u(a, b);
		}

		printf("Scenario #%d:\n", i);
		if (flag) printf("Suspicious bugs found!\n\n");
		else printf("No suspicious bugs found!\n\n");
	}

	return 0;
}
QT+QGIS跨平台编译(基于Qt,采用一套代码、一套框架,完成QGIS第三方库、核心库、应用程序的跨平台编译) QT+QGIS跨平台编译。 基于Qt,采用一套代码、一套框架,完成QGIS第三方库、核心库、应用程序的跨平台编译。 阅读详情

相关推荐

工业组态软件Intouch(单机版)入门{第一篇}

通俗来讲Intouch就是一个能将PLC里的信号显示在画面上的软件。

weixin_41571357的博客 1万+

点击修改按钮判断后端返回数据显示对应内容:如性别,sex : 0-男,1-女

点击修改按钮判断后端返回数据显示对应内容:如性别,sex : 0-男,1-女

xx820702的博客 3561

Autodesk Genuine Service卸载失败?试试这个隐藏文件删除法(Win8-Win11通用)

本文针对Autodesk Genuine Service在Windows系统(Win8-Win11)中卸载失败的常见难题,提供了深度解析与根治方案。核心方法是手动定位并删除两个关键的隐藏文件(ProductInformation.pit和id.dat),以解除文件锁定或数据损坏导致的卸载障碍,随后再通过标准流程即可成功卸载。该方法通用性强,能有效解决这一困扰设计师和工程师的顽固问题。

weixin_29220405的博客 1470

Sex boosts brain growth, study suggests

Sex apparently can help the brain grow, according to new findings in rats. Past findings had shown that stressful, unpleasant events could stifle brain cell growth in adults. To see if pleasant albei...

cindylu520的专栏 3万+

Embedding理解及keras中Embedding参数详解,代码案例说明

Embedding理解 嵌入层将正整数(下标)转换为具有固定大小的向量 ------官网 词嵌入是一种语义空间到向量空间的映射,简单说就是把每个词语都转换为固定维数的向量,并且保证语义接近的两个词转化为向量后,这两个向量的相似度也高。 举例说明embedding过程: “Could have done better” 通过索引对该句子进行编码,每个单词分配一个索引,上面的句子就会变成这样: 122 8 114 12 创建嵌入矩阵,即每一个索引需要分配多少维向量,也就是说每个词需要转化为多少维

wo的博客 1万+

从零开始搭建属于自己的语音识别API服务器(ASRT开源项目)

材料准备 云服务器 (本人使用的的是阿里云服务器 Ubuntu(Linux操作系统)) 环境搭建 1. Python 3.7 话不多说直接上代码 sudo su yum -y install git yum -y install gcc yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-deve

zhi_qian的博客 5647

12.14

<br />1.The movie is about to start.电影快开始了。<br /> <br />2.what would you like to have?你要吃什么?<br /> <br />3.I 'm going to buy some snacks.我去买点儿零食。<br />      <br />      snack [snæk] n.1. 小吃; 点心; 快餐<br /> <br />4.popcorn and cola .爆米花和可乐。<br /> <br />     

ztm521的专栏 5万+

单片机应用案例:ESP32 搭配 BH1750 光强传感器和 Web 服务器

在该应用案例中,我们将使用 ESP32 开发板作为主控制器,BH1750 光强传感器用于采集环境光强度数据,并通过 Web 服务器展示采集到的数据。步骤一:购买材料步骤二:连接硬件步骤三:编写代码我们将使用 Arduino IDE 编写代码,以下是主要代码:// WiFi 设置const char* ssid = “你的 WiFi 名称”;const char* password = “密码”;// Web 服务器实例// BH1750 实例// 获取当前光强度数据。

RlDart的博客 812

Javascript

javascript概述,基本语法,常用函数,正则表达式,以及用js写的一个俄罗斯方块案例...

qq_43910862的博客 1802

YOLOv11改进 | 集成FEM、FFM与SCAM即插即用模块:特征增强、融合与空间上下文建模新范式

FEM解决特征表达不足问题,增强关键特征响应FFM优化多尺度融合,提升小目标检测精度SCAM建模空间上下文,改善目标交互预测在保持YOLOv11实时性优势的同时,实现mAP+8.1%的显著提升,特别在复杂光照、密集目标、交互预测场景表现突出。其模块化设计使开发者可根据需求灵活组合,为各种复杂场景提供定制化解决方案。未来,随着跨模态扩展与神经架构搜索的深入,YOLOv11-FSC将进一步推动目标检测技术向更智能、更高效的方向发展。

走向CTO的路上... 988

从 Token 到 Agent:一文串起 AI 大模型核心概念

摘要:本文系统解析了现代AI系统的八大核心概念:Token(语言处理的最小单位)、Context(AI的短期记忆)、Prompt(指令接口)、Tool(能力扩展器)、MCP(工具生态协议)、Agent(自主智能体)和AgentSkill(专业技能封装)。文章揭示了这些概念如何共同构成AI从基础语言理解到自主决策的技术脉络,重点阐述了Token对计算成本的影响、Prompt工程的重要性、Tool如何突破AI的能力边界,以及Agent如何通过"感知-规划-执行-反思"循环完成复杂任务。最后指

jundao1997的专栏 249

[InnoDB]性别字段为什么不适合加索引

表结构与数据 id为主键,id为5,15,25,35…时sex=1 sex=0,90000条数据;sex=1,10000条数据 CREATE TABLE `people` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `sex` tinyint(1) unsi...

Java之上 9540

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

hdu 1829 A Bug's Life

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1829 不想说了,说多了都是泪啊.... 本来用dsu已经过了,看了discuss可以用二分图过掉,思考一波,敲完代码提交,直接wa到死啊,看了讨论版测试了几组样例都能过,wa了十几发到现在也不知道为什么啊啊啊啊啊...心好累.. 用0,1表示不同性别的人,若两者性别不同则合并,否则直接b

Where amazing happens 309

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

A Bug's Life-HDU-1829

题目地址:hdu-1829 本题是考察并查集的运用。 **题意:有k对编号为1~n的果蝇交配了, 给你数据后让你判断是否有同性恋。**Problem Description Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that th

差不多先灬森 922

hdu 1829 A Bug's Life 并查集

hdu1829链接:点击打开链接 本想用vector写,没写出来/衰,看了一下结题报告,哎,我真的没学会并查集。利用并查集,当根节点相同的时候,观察两点与根节点的关系 是同性还不异性,重点是在查找根节点的时候就要更新各点与爷爷的关系 code: #include #include #include using namespace std; int n,m; int father[2100],

lois_123的专栏 429

HDU 1829 A Bug's Life(种类并查集)

http://acm.hdu.edu.cn/showproblem.php?pid=1829 A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7294    Accepted Submission

fcbruce 1174

HDU1829 A Bug's Life 并查集

并查集模板:http://blog.youkuaiyun.com/mishifangxiangdefeng/article/details/7165351/* HDU1829A Bug's Life 并查集的应用 这题不是判断是否在同一集合,而是判断是否在不同的集合 */ #include #include "UFS.h" using namespace std; int oppo[MAXN];//记录系

幸福在路上 1926

HDU1829 - A Bug's Life 分组并查集

HDU1829 - A Bug's Life 分组并查集,和POJ上的"食物链"是同一类的题,这题是最基础的分组并查集.

P_rogrammer的专栏 697

HDU 1829A Bug's Life 并查集

A Bug's Life Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders...

xcatf的博客 584

HDU 1829 A Bug's Life

Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only interact with bugs of the opposite gende...

起名好难呀! 182

HDU 1829 A Bug's Life

A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13928    Accepted Submission(s): 4528 Problem Description Background 

学 以致用 230

HDU 1829 A Bug's Life (分组并查集)

题目意思:给定一系列数对,例如a和b,表示a和b不是同一种性别,然后不断的给出这样的数对,问有没有性别不对的情况。 例如给定: 1 2 3 4 1 3 那这里就是说1和2不是同种性别,3和4也不是同种性别,1和3不是同种性别,那这样就说明1和3是同一种性别,2和4是同一种性别,所以没有任何歧义,这时候输出No suspicious bugs found!。 但是例如,(本文作者:优快云:凌风) 1 2 2 3 1 3 1和2不同性别,2和3不同性别,那么

凌风 6783

【并查集】hdu 1829 A Bug's Life

对这题还是一知半解。。代码先贴上,回头继续看。。

Gzbgreat的博客 483

HDU 1829 A bug's life

Description Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only interact with bugs of

my name is BUG 435
上一篇: HDU 4126 Genghis Khan the Conqueror
下一篇: HDU 1532 Drainage Ditches
Crossing over
博客等级 码龄10年 6粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值