nyoj 1022 合纵连横 (并查集<节点删除>)
合纵连横
- 描述
-
乱世天下,诸侯割据。每个诸侯王都有一片自己的领土。但是不是所有的诸侯王都是安分守己的,实力强大的诸侯国会设法吞并那些实力弱的,让自己的领土面积不断扩大。而实力弱的诸侯王为了不让自己的领土被吞并,他会联合一些其他同样弱小的诸侯国,组成联盟(联盟不止一个),来共同抵抗那些强大的诸侯国。 强大的诸侯国为了瓦解这些联盟,派出了最优秀的间谍来离间他们,使一些诸侯国退出联盟。最开始,每个诸侯国是一个联盟。
有两种操作
1、U x y 表示x和y在同一个联盟。(0≤x,y<n)
2、D x 表示x退出联盟。
- 输入
- 多组测试数据
第一行两个数,n和m(1 ≤ n≤ 10^5, 1 ≤ m ≤10^5),分别表示诸侯国的个数和操作次数。
接下来有m行操作 - 输出
- 输出联盟的个数
- 样例输入
-
5 7
U 0 1
U 1 2
U 0 3
D 0
U 1 4
D 2
U 0 2
10 1
U 0 9 - 样例输出
-
Case #1: 2
Case #2: 9/**
分析:主要考察并查集中点的删除
算法:
Ⅰ、以前并查集是以其 1 - n 中的元素即作根节点又作子节点
《这样删除 pre [a] = n ++; 的话会使原先在一个区域的点可能不在一个区域了》
Ⅱ、现在我们将所有 1 - n 中的点作为子节点,n - 2n 的点作为根节点
《这样我们删除 pre [a] = 2n ++;的时候就不会打乱以前已在一个区域的点》
Ⅲ、其中 my_find()、my_join() 与以前并查集模板一致 关键代码:
void init () {
for (int i = 0; i < n; ++ i)
pre [i] = i + n;
for (int i = n; i < 2*n + m; ++ i)
pre [i] = i;
pos = 2*n;
return ;
]
**/C/C++代码实现(AC):
#include <bits/stdc++.h> using namespace std; int n, m, pre [], pos; void init () {
for (int i = ; i < n; ++ i)
pre [i] = i + n;
for (int i = n; i < n + n + m; ++ i)
pre [i] = i;
pos = n + n;
return ;
} int my_find (int x) {
int n1 = x;
while (n1 != pre [n1]) {
n1 = pre [n1];
}
int i = x, j;
while (pre [i] != n1) {
j = pre [i];
pre [i] = n1;
i = j;
}
return n1;
} void my_join (int a, int b) {
int n1 = my_find (a), n2 = my_find (b);
if (n1 != n2)
pre [n1] = n2;
} int main () {
int k = ;
while (~scanf ("%d%d", &n, &m)) {
init ();
char c;
int a, b, ans = , temp [] = {};
for (int i = ; i < m; ++ i) {
getchar ();
scanf ("%c", &c);
if (c == 'U') {
scanf ("%d%d", &a, &b);
my_join (a, b);
}
else {
scanf ("%d", &a);
pre [a] = pos ++;
}
} for (int i = ; i < n; ++ i) { // 查找有多少个区域
if (!temp [my_find (i)]) { // 在一个区域的有共同的根节点
temp [my_find (i)] = ;
++ ans;
}
}
printf ("Case #%d: %d\n", k ++, ans);
}
}
nyoj 1022 合纵连横 (并查集<节点删除>)的更多相关文章
- nyoj 1022 合纵连横 经典并查集
思路:关键在于并查集的删点操作. 给每个诸侯国一个另外的编号,比如box[i]表示诸侯国i现在处于第box[i]个联盟,可以随时改变它的联盟编号,并且让box[i] = k, 实现删除操作.以前联盟中 ...
- NYOJ 1022 合纵连横 (并查集)
题目链接 描述 乱世天下,诸侯割据.每个诸侯王都有一片自己的领土.但是不是所有的诸侯王都是安分守己的,实力强大的诸侯国会设法吞并那些实力弱的,让自己的领土面积不断扩大.而实力弱的诸侯王为了不让自己的领 ...
- Nyoj 布线问题(并查集&&图论)
描述南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有的楼都供上电.2.所用电线花费最少 输入 第一行是一个整数n表示有n组测试数据.(n ...
- nyoj 711 枚举+并查集
#include<stdio.h>//从大到小不断枚举边直到找到s-t的路径,判断从s可以到t可以用并查集来判断 #include<stdlib.h>//枚举最大的一条边肯定 ...
- nyoj 1022 合纵连横【并查集节点的删除】
合纵连横 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 乱世天下,诸侯割据.每个诸侯王都有一片自己的领土.但是不是所有的诸侯王都是安分守己的,实力强大的诸侯国会设法 ...
- nyoj 1022:合纵连横(并查集删点)
题目链接 参考链接 只附代码好了 #include<bits/stdc++.h> using namespace std; ; int a[N],b[N],vis[N]; int n,m, ...
- nyoj 38 简单并查集的应用&最小生成树
#include<stdio.h> #include<stdlib.h> #define inf 0x3fffffff #define N 600 struct node { ...
- NYOJ 208 Supermarket (模拟+并查集)
题目链接 描述 A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Pr ...
- NYOJ 129 树的判定 (并查集)
题目链接 描述 A tree is a well-known data structure that is either empty (null, void, nothing) or is a set ...
随机推荐
- 这可能就是你苦苦寻找免费、高颜值、功能强大的 Markdown 编辑器(共5款)
本文作者 | HelloGitHub-小猪蹄 Markdown 是一个轻量级的标记语言,语法简单.容易上手,它深受程序员.博客主等人群的钟爱.随着越来越多的博客系统支持 Markdown,它也开始越来 ...
- dos命令创建批处理脚本
win+r 打开cmd 输入 copy con 1.bat 回车 进入编辑状态输入 @echo off echo xxxx Ctrl+z 结束编辑 会在当前目录生成一个bat文件
- python深拷贝与浅拷贝的区别
可变对象:一个对象在不改变其所指向的地址的前提下,可以修改其所指向的地址中的值 不可变对象:一个对象所指向的地址上值是不能修改的,如果你修改了这个对象的值,那么它指向的地址就改变了,相当于你把这个对象 ...
- ESP32 开发之旅① 走进ESP32的世界 安装开发环境
1.前言 欢迎大家来到ESP32的世界,从现在开始,笔者将带领大家慢慢揭开ESP32神秘的面纱. 在学习ESP32之前,博主希望读者能有ESP8266的学习基础(ESP32 Wifi模 ...
- HTML CSS整理笔记
——修改placeholder提示的样式: 1.除IE外通用写法 类名或标签名::placeholder {color: red;}2.加兼容前缀写法 css超出一行显示省略号:给定宽度(width: ...
- [Tarjan系列] Tarjan算法与有向图的SCC
前面的文章介绍了如何用Tarjan算法计算无向图中的e-DCC和v-DCC以及如何缩点. 本篇文章资料参考:李煜东<算法竞赛进阶指南> 这一篇我们讲如何用Tarjan算法求有向图的SCC( ...
- day10整理(面对对象,过程,类和对象)
目录 一 回顾 (一)定义函数 (二)定义函数的三种形式 1.空函数 2.有参函数 3.无参函数 (三)函数的返回值 (四)函数的参数 1.形参 2.实参 二 面向过程编程 三 面向对象过程 四 类和 ...
- Handler的postDelayed(Runnable, long)
handler.postDelayed(myRunnable,1000)是为了轮播图片,每隔1000ms后执行一次run方法,实现轮播实例如下: public void MesageColse(){ ...
- 文件读取(filestream)
在stream中已经介绍过,文件读取应用filestream,其是以字节为单位读取文件的.在操作中,当应用filestream创建文件流,读取时应先定义一个字节数组,在转化成char类型,最后转化成s ...
- vue-cli安装方法
vue-cli:vue文件,css文件,less文件,图片--->htmles6代码--->es5代码 template标签里面,只能有1个跟元素 script标签里面导入组件import ...