D - New Friends(AtCoder Beginner Contest 350)

news2024/9/20 0:56:57

题目链接:

D - New Friends (atcoder.jp)

题目大意:

题目解析:

 题目的大致意思: 假如A和B是朋友 B和C也是朋友 那么当A和C不是朋友的时候 可以通过B让A和C也成为朋友 问你增加了多少对的朋友关系

题目分析:

咱们可以从图论去考虑 当这一群是一个连通块 那么这一群点(人) 都是可以通过这个连通块去成为朋友的 那么假如这个连通块有N个人 那么就会有 N * (N - 1) / 2 条边(朋友关系)  那么全部的连通块减去之前的M条原有的朋友关系就是答案 注意开long 存取答案

那么问题来了 怎么去看他们是不是在一个连通块 并查集出手了

复习一下 并查集让点y到点x的连通下 那么就是p[find(y)] = find(x) 直接就过去了

代码:

import java.util.*;

// 我认为这个题是并查集的题
public class D {
	public static int[] p = null; // 表示的是父亲
	public static void main(String[] args) {
		var sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		p = new int[n + 10];
		for(int i = 1; i <= n; i ++ ) {
			p[i] = i; // 刚开始的祖宗 都是自己自己
		}
		long ret = 0;
		int mm = m;
		
		var mp = new HashMap<Integer, Long>();
		var se = new TreeSet<Integer>();
		while(m -- != 0 ) {
			int x = sc.nextInt();
			int y = sc.nextInt();
			// 这里理解为y加到x的节点下面
			p[find(y)] = find(x); // 该不会是这里出问题了吧
		}
		
		for(int i = 1; i <= n; i ++ ) {
			int x = p[find(i)];
			if(!mp.containsKey(x)) {
				mp.put(x, 0l);
			}
			long t = mp.get(x) + 1;
			mp.put(x, t);
			se.add(x); // 这里面存的是 都是祖宗
		}
		for(int i : se) {
			//System.out.print("i = " + i + "\n");
			//System.out.print("x = " + mp.get(i) + "\n");
			long tt = mp.get(i);
			long t2 = mp.get(i) - 1;
			
			ret += tt * t2 / 2;
			//System.out.print("ret = " + ret + "\n");
		}
		ret -= mm;
		System.out.print(ret);
	}
	public static int find(int x) {
		if(x != p[x])p[x] = find(p[x]);
		return p[x];
	}
}

运行的结果:

 因为long问题和并查集认祖宗的问题 出现了几次wa

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL 语言:完整性约束

文章目录 概述主键 ( Primary Key ) 约束外键&#xff08;Foreign Key&#xff09;约束属性值上的约束全局约束总结 概述 数据库的完整性是指数据库正确性和相容性&#xff0c;是防止合法用户使用数据库时向数据库加入不符合语义的数据。保证数据库中数据是正确的&#xff0c;…

多线程JUC 第2季 BlockingQueue 阻塞队列

一 阻塞队列 1.1 阻塞队列介绍 阻塞队列&#xff08;BlockingQueue&#xff09;是一个在队列基础上又支持了两个附加操作的队列&#xff1a; put方法&#xff1a;当队列装满时&#xff0c;添加的线程则被阻塞&#xff0c;直到队列不满&#xff0c;则可用。 take方法&#x…

【vue与iframe通讯】

vue 与 iframe 通讯 发送数据vue 向 iframe 发送数据iframe 向 vue 发送数据接收信息( vue & iframe 通用) 实现相互通讯通讯流程图实现代码vue 页面iframe页面iframe 内部重定向访问地址,更新 vue 路由 访问跨域代码下载 前言&#xff1a;vue嵌套iframe实现步骤 发送数据…

HTML+CSS+JavaScript网页制作案例教程第2版-黑马程序员-第9章动手实践

文章目录 效果代码网盘 效果 代码 index.html <!doctype html> <html> <head> <meta charset"utf-8"> <title>通栏效果</title> <link rel"stylesheet" type"text/css" href"index.css"> …

【STM32踩坑】HAL固件库版本过高导致烧录后无法运行问题

问题引入 目前STM32CUBEMX已经更新到了6.11版本&#xff0c;对应的固件库也一直在更新&#xff1b; 以STM32F1库为例&#xff0c;目前最新的库对应版本为1.8.5 但是我们会发现&#xff0c;如果直接使用1.8.5版本的固件库生成HAL源码后&#xff0c;烧录是可以烧录&#xff0c;但…

程序无法监听端口,但netstat -aon | findstr却显示该端口未被占用

程序无法监听端口&#xff0c;但netstat -aon | findstr却显示该端口未被占用 ⚙️1.软件环境⚙️&#x1f50d;2.问题描述&#x1f50d;&#x1f421;3.解决方法&#x1f421;&#x1f914;4.结果预览&#x1f914; ⚙️1.软件环境⚙️ Windows10 教育版64位 &#x1f50d;2.问…

P1115 最长子段和

题目描述 给出一个长度为 &#x1d45b;n 的序列 &#x1d44e;a&#xff0c;选出其中连续且非空的一段使得这段和最大。 输入格式 第一行是一个整数&#xff0c;表示序列的长度 &#x1d45b;。 第二行有 &#x1d45b;n 个整数&#xff0c;第 &#x1d456; 个整数表示序列的…

知识存储概述

文章目录 知识存储概述知识存储方式知识存储基础工具技术发展趋势 知识存储是针对知识图谱的知识表示形式设计底层存储方式&#xff0c;完成各类知识的存储&#xff0c;以支持对大规模图数据的有效管理和计算。知识存储的对象包括基本属性知识、关联知识、事件知识、时序知识和…

Overall Accuracy(OA)、Average Accuracy(AAcc)计算公式

四个重要的指标&#xff1a; True Positive&#xff08;TP&#xff09;、False Positive&#xff08;FP&#xff09;、True Negative&#xff08;TN&#xff09;和False Negative&#xff08;FN&#xff09;。 TP表示分类器预测结果为正样本&#xff0c;实际也为正样本&#xf…

以一道简单的例题计算灵敏性分析

在例1.1中&#xff0c;全部的变量包括&#xff1a;猪的重量w(磅),从现在到出售猪期间经历的时间t(天),t天内饲养猪的花费C(美元),猪的市场价格p(美元/磅),售出生猪所获得的收益R(美元),我们最终获得的净收益P(美元).这里还有一些其他的有关量&#xff0c;如猪的初始重量(200磅)…

看看我一天鼠标点击多少次,键盘点击多少次

1、说明 前一段时间看到新闻,公司监控员工的一天中使用键盘数据次数,员工键盘和鼠标点击次数太少而被辞退。真是让人气愤,真是万恶的资本家呀。 我赶紧看看我一天工作下来我点击了多少次键盘和鼠标,可是我怎么知道呢,咱是干啥的呀,干脆写个小软件统计一下我一天点了多少…

3d火灾救援模拟仿真培训软件复用性强

消防VR安全逃生体验系统是深圳VR公司华锐视点引入了前沿的VR虚拟现实、web3d开发和多媒体交互技术&#xff0c;为用户打造了一个逼真的火灾现场应急逃生模拟演练环境。 相比传统的消防逃生模拟演练&#xff0c;消防VR安全逃生体验系统包含知识讲解和模拟实训演练&#xff0c;体…

Redis篇 数据的编码方式和单线程模型

编码方式和单线程模型 一.redis中的数据类型二. Redis中查询编码方式命令三. 单线程模型四. 经典面试题,redis为何这么快?什么是IO多路复用? 一.redis中的数据类型 在redis中,数据类型大致分为5种 1.字符串类型 2.哈希 3.列表 4.集合 5.有序集合 redis底层在实现这些数据结构…

AI性价比之最、国产化后浪香橙派 AIpro深度体验

目录 前言硬件上手分析第一印象硬件参数分析主控猜测电源分析壳子分析软件测试tf卡镜像烧录与上电开机板卡的连接芯片确认与算力测试体验AI应用样例大模型试用CPU性能测试与升级其他试用记录SATA SSD启动使用感受与场景需求分析使用感受场景需求分析无人机应用场景智慧城市IOT领…

linux 查看csv文件,按指定列聚合 排序

在Linux中&#xff0c;你可以使用awk工具来查看CSV文件的内容&#xff0c;并按照指定的列进行聚合。awk是一种强大的文本处理工具&#xff0c;它可以处理文本文件中的数据&#xff0c;并根据条件执行相应的操作。 以下是一个示例&#xff0c;假设你有一个名为data.csv的CSV文件…

ES学习圣经:从0到1, 精通 ElasticSearch 工业级使用

尼恩&#xff1a;百亿级数据存储架构起源 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;经常性的指导小伙伴们改造简历。 经过尼恩的改造之后&#xff0c;很多小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试机会&#xff0c…

LeetCode第131场双周赛C++题解

3158.求出出现两次数字的XOR值 给你一个数组 nums &#xff0c;数组中的数字 要么 出现一次&#xff0c;要么 出现两次。 请你返回数组中所有出现两次数字的按位 XOR 值&#xff0c;如果没有数字出现过两次&#xff0c;返回 0 。 示例 1&#xff1a; 输入&#xff1a;nums …

我被恐吓了,对方扬言要压测我的网站

大家好我是聪&#xff0c;昨天真是水逆&#xff0c;在技术群里交流问题&#xff0c;竟然被人身攻击了&#xff01;骂的话太难听具体就不加讨论了&#xff0c;人身攻击我可以接受&#xff0c;我接受不了他竟然说要刷我接口&#xff01;&#xff01;&#xff01;&#xff01;这下…

对于创建相关项目时,项目出现红色感叹号,且无jre环境显示,应该怎么解决?

首先&#xff0c;假设你已经下载好了相关你的jre环境&#xff0c;注意&#xff1a;如果你的jre不想用之前用的默认的话&#xff0c;你应该新建一个新的文件路径来存储你的新的jre环境下的项目文件。 先直接new->project->javaproject 点击next: 显示如下&#xff1a;&…

Vue实现二维码的展示及下载

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…