hihocoder 1638:多级并查集
题目链接
并查集可以用于聚类。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;class Main {
int N = (int) (1e4 + 7);
int father[] = new int[N << 1];class FatherDis {int father;int dis;FatherDis(int father, int dis) {this.father = father;this.dis = dis;}@Overridepublic String toString() {return String.format("(father=%d,dis=%d)", father, dis);}
}FatherDis find(int x) {if (father[x] == x) {return new FatherDis(x, 0);}FatherDis f = find(father[x]);f.dis++;if ((f.dis & 1) == 0) {father[x] = f.father + N;} else {father[x] = f.father;}return f;
}Main() {Scanner cin = new Scanner(System.in); int t = cin.nextInt();while (t-- > 0) {int n = cin.nextInt(), m = cin.nextInt();for (int i = 1; i <= n; i++) father[i] = father[i + N] = i;int fail = -1;for (int i = 0; i < m; i++) {int x = cin.nextInt(), u = cin.nextInt(), v = cin.nextInt();if (fail != -1) continue;//读完数据再说FatherDis fu = find(u), fv = find(v);boolean sameLevel = (fu.dis & 1) == (fv.dis & 1);if (x == 0) {if (fu.father != fv.father) {if (sameLevel) {father[fu.father] = fv.father + N;} else {father[fu.father] = fv.father;}} else {if (!sameLevel) {//不同类别fail = i;}}} else {if (fu.father != fv.father) {if (sameLevel) {father[fu.father] = fv.father;} else {father[fu.father] = fv.father + N;}} else {if (sameLevel) {//同一类别fail = i;}}}}if (fail == -1) {System.out.println("great");} else {System.out.println("sad");System.out.println(fail + 1);}}
}public static void main(String[] args) {new Main();
}
}
hihocoder 1638:多级并查集相关推荐
- [hihoCoder]无间道之并查集
题目大意: #1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息--额,说远了,总之, ...
- hihoCoder 无间道之并查集
题目 题意:两种操作,一种是告诉它哪两个人是同一阵营的,而另一种是询问某两个人是不是同一阵营的,是:输出yes ,不是:输出:no. 这道题思路是并查集,但问题在于,如何把名字(是个字符串)合并? 一 ...
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法
tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...
- POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树
一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
- 【BZOJ1015】【JSOI2008】星球大战 并查集
题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...
- 并查集 HDOJ 1232 畅通工程
题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <c ...
最新文章
- php – Laravel 7 Session Lifetime
- 充分理解表达式——《狂人C》习题解答2(第二章习题5)
- 如何实现java虚拟机的优化_Java虚拟机JVM优化实战的过程全记录
- codetyphon, Lazarus+FreePascal+Tools+Free Components packages+Free Libraries
- Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中
- linux smb 所有者,python-3.x - 在Linux上使用python从smb共享中获取文件的所有者。 - SO中文参考 - www.soinside.com...
- Apache Nuvem将带来更多的开源云?
- FTP连接时出现“227 Entering Passive Mode”的解决方法
- SpringBoot:Spring boot 主程序的功能SpringApplication.run(启动流程)
- Sublime Text 2删除行尾空格
- Python 基础 —— sorted
- wireshark学习使用
- HDU 1358 (所有前缀中的周期串) Period
- 语法分析——自下而上
- 周期均方根和有效值的区别_何为有效值?何为均方根?
- 空气质量等级c语言编程,编程小白如何快速处理空气质量数据
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- ubuntu 命令行批量重命名文件夹
- 隐藏在今日头条百亿市值背后的算法:巨大可能与现实困境
- 今天搞毕设了么?——3.29 audioread读取音频文件