当前位置: 首页 > news >正文

D - New Friends(AtCoder Beginner Contest 350)

题目链接:

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

相关文章:

  • 海外仓快递系统哪个好?教你快速选到适合自己的管理系统
  • # linux 中使用 visudo 命令,怎么保存退出?
  • 【网络】高级IO(select||poll||epoll)
  • 中断处理过程介绍
  • 9. C++通过epoll+fork的方式实现高性能网络服务器
  • 前端面试题日常练-day37 【面试题】
  • 合并featurecount产生的多个表达矩阵文件
  • busco,checkM2:基因组或MAG完整度分析
  • Web开发——HTMLCSS
  • HTTP方法、状态码和请求过程
  • 安装 Android Studio 2024.1.1.6(Koala SDK35)和过程问题解决
  • Python开发 —— 错误ModuleNotFoundError: No module name
  • Java原生JDBC概览
  • 快速排序算法备考
  • [个人笔记] 记录CentOS7构建docker-ce的过程
  • 345-反转字符串中的元音字母
  • Apache Pulsar 2.1 重磅发布
  • CAP 一致性协议及应用解析
  • ComponentOne 2017 V2版本正式发布
  • Computed property XXX was assigned to but it has no setter
  • CSS居中完全指南——构建CSS居中决策树
  • ES6之路之模块详解
  • idea + plantuml 画流程图
  • If…else
  • Python中eval与exec的使用及区别
  • Spark RDD学习: aggregate函数
  • spring boot 整合mybatis 无法输出sql的问题
  • 如何编写一个可升级的智能合约
  • 使用docker-compose进行多节点部署
  • 微信小程序--------语音识别(前端自己也能玩)
  • 我与Jetbrains的这些年
  • 硬币翻转问题,区间操作
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 移动端高清、多屏适配方案
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #define,static,const,三种常量的区别
  • #NOIP 2014# day.2 T2 寻找道路
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (四)事件系统
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)socket Aio demo
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .NET CORE Aws S3 使用
  • /etc/motd and /etc/issue
  • @Query中countQuery的介绍
  • [2669]2-2 Time类的定义
  • [autojs]逍遥模拟器和vscode对接
  • [C/C++]数据结构 堆的详解
  • [C++]unordered系列关联式容器