import java.util.Scanner;

public class Main {

static int M = 500010;

static int d[] = new int[M];//结点到父节点的距离!!!

static int p[] = new int[M];//p[i]代表i的祖宗结点

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

int m = sc.nextInt();

for (int i = 1; i <=n; i ++ ) p[i] = i;

int res = 0;

while(m-- >0)

{

int t = sc.nextInt();

int x = sc.nextInt();

int y = sc.nextInt();

if(x>n || y>n) res ++;

else

{

int px = find(x);

int py = find(y);

if(t==1)//看是否x和y是同类

{

if(px==py && (d[x]-d[y])%3!=0) //如果x和y的根节点相同且到根节点的距离之差模3==0

res++;

else if(px!=py)//如果根节点不同

{

p[px] = py;//把y的根节点赋值给px的根节点

d[px] = d[y] - d[x];//更新px到根节点的距离

}

}

else

{

if(px==py && (d[x]-d[y]-1)%3!=0) //如果x和y的根节点相同且到根节点的距离之差模3==1

res++;

else if(px!=py)

{

p[px] = py;//把y的根节点赋值到px的根节点

d[px] = d[y] + 1 - d[x];//更新px到根节点的距离

}

}

}

}

System.out.println(res);

}

static int find(int x)

{

if(p[x]!=x)

{

int t = find(p[x]);//先把x的根节点赋值给t

d[x] += d[p[x]];//x到根节点的距离等于x到父节点的距离加父节点到根节点的距离

p[x] = t;//把t赋值给p[x];

}

return p[x];

}

}

Java矩形区域食物链_AcWing 240. 食物链(JAVA)相关推荐

  1. java语言生日蛋糕代码_AcWing 168. 【Java】生日蛋糕

    // 1. dfs 顺序: 枚举可能的 r,h 拼成一层蛋糕 (顺序是层内操作) // 2. dfs 状态: preR, preH, 当前层,累计体积,累计面经 (状态是分支和给下次的依赖值) // ...

  2. 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析

    来自:好好学java 这篇文章主要介绍Java内存区域,也是作为Java虚拟机的一些最基本的知识,理解了这些知识之后,才能更好的进行Jvm调优或者更加深入的学习,本来这些知识是晦涩难懂的,所以希望能够 ...

  3. 深入理解Java虚拟机-Java内存区域透彻分析

    Java虚拟机深入理解系列全部文章更新中- 深入理解Java虚拟机-Java内存区域透彻分析 深入理解Java虚拟机-常用vm参数分析 深入理解Java虚拟机-JVM内存分配与回收策略原理,从此告别J ...

  4. java主要内存区域_可能是把Java内存区域讲的最清楚的一篇文章

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄 ...

  5. 【JAVA 学习基础】java内存区域 探究

    前言 文章仅是笔者个人的学习笔记,存在一些只有笔者个人能看到的用词或者描述,如果有不明确的地方,欢迎留言,理性讨论. 一.概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外 ...

  6. Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 Java与C++之间有一堵由内存动态分配和垃圾收集技术围城的"高墙",墙外的人想进去,墙里的人却想出来 概述 对于C.C++程序开发人员来说,在内存 ...

  7. 深入理解Java虚拟机——第二章——Java内存区域与内存溢出异常

    运行时数据区域 Java虚拟机运行时数据区域 程序计数器 程序计数器可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过改变这个计数器的值来选取下一条所需要执行的字节码指令,分支. ...

  8. 32位jdk最大内存_你了解Java 内存区域和GC机制吗?

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  9. java内存区域与内存溢出异常_Java内存区域与内存溢出异常

    Java的内存管理是一个老生常谈的问题,虽然Java号称可以自动管理自己的内存,使程序员从内存管理的围墙解放出来,但是一连串的内存泄漏和溢出方面的问题,使得我们不得不去深入了解Java的内存管理机制. ...

最新文章

  1. VC代码的编写和调试---编写易于调试的VC代码
  2. java inputstream的read一次只能读到一个字节_20210118-JAVA面试题
  3. 网络中最常用的网络命令(2)-完整参数
  4. Navicat——连接SQL Server数据库方法
  5. jQuery笔记[1]——jqGrid中实现自定义链接弹出subgrid
  6. CSS3的边框(三)
  7. Spring-Cloud 学习笔记-(4)负载均衡器Ribbon
  8. 后处理安装_Mastercam2017(自定义后处理选项)安装!
  9. oracle 11g jdbc jar包在哪个文件目录
  10. VMware 6.5下载地址及序列号(转,备用)
  11. 的文件夹结构_用framework7开发APP:6.目录结构
  12. JavaScript学习总结(13)——JavaScript常用正则表达式
  13. 什么样的会员管理才叫有效果的会员运营方案?
  14. 写给过得很辛苦很迷茫的你~一定要看啊
  15. 百度网站统计和CNZZ网站统计对比
  16. workgroup无法访问.您可能没有权限 完美问答解
  17. java 微信多线程推送_Java实现 微信小程序 + 消息推送
  18. 《新理解矩阵1》:矩阵是什么?
  19. 计算机开机键英语字母,电脑开机黑屏显示英文字母
  20. shell 编程 小案例

热门文章

  1. 使用HTML完成简历
  2. Spring boot统一日志记录
  3. MySQL添加、删除字段
  4. python调用通达信函数_python获取通达信基本数据源码
  5. 程序猿惯用口头禅,你被击中了吗?
  6. 非常强悍的 RabbitMQ 总结,写得真好
  7. java基础(七) 深入解析java四种访问权限
  8. 蓝桥杯-5-1最小公倍数(java)
  9. Nginx-windows下nginx安装、配置与使用
  10. php 二叉树判断节点的位置,PHP实现判断二叉树是否对称的方法