并查集 2019年8月10日计蒜客联盟周赛 K.数组
题目链接:https://nanti.jisuanke.com/t/40860
题意:给一个长度为n的数组a[],n<1e5,a[i]<1e5
三个操作:
1 x y:把所有值为x的数据改成a[y]
2 x:输出a[x]的值
3 x:值为x的树有多少个
官方解析:
设father[i]表示初值为i的元素,当前的值为多少。
设cnt[i]表示当前值为i的元素有多少。
用并查集维护这两个数组。
个人思路:
做这道题的人并不多,可能是想不到可以用并查集(那我+1)。
因为要将值为x的数据进行修改,所以fa[i]!=a[i],而是存的i,即fa[i]=i(i从1到maxn)。
1操作把x和a[y]进行merge(merge中把x的size加给a[y],x的size置为0,变成有size[x]+size[a[y]]个a[y],0个x)。
但是如果size[x]已经是0了(有0个值为x的数,已经变成某个数tmp了),就不能把他和a[y]合并了,不然2操作查询a[x]就会输出是a[y]而不是tmp。【感谢starhai霸霸的指出】
2操作输出a[x]的祖宗结点,3操作输出size[x]。
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int n,a[maxn];
int size[maxn],fa[maxn];
int get(int x)
{
if(fa[x]==x){return x;}
int y=fa[x];
fa[x]=get(y);
return fa[x];
} void merge(int a,int b)
{
a=get(a);
b=get(b);
if(a!=b)
{
fa[a]=b;
size[b]+=size[a];
size[a]=;
}
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
fa[a[i]]=a[i];
size[a[i]]++;
}
int q;
scanf("%d",&q);
while(q--)
{
int op,x,y;
scanf("%d",&op);
if(op==)
{
scanf("%d%d",&x,&y);
if(size[x]) merge(x,a[y]);
}
else if(op==)
{
scanf("%d",&x);
printf("%d\n",get(a[x]));
}
else
{
scanf("%d",&x);
printf("%d\n",size[x]);
}
}
return ;
}
自用带权并查集模板
#include <iostream>
using namespace std;
int father[],n;
int dist[],size[];
void init()
{
for(int i=;i<=n;i++)
{
father[i]=i,dist[i]=,size[i]=;
}
}
int get(int x){
if(father[x]==x){return x;}
int y=father[x];
father[x]=get(y);
dist[x]+=dist[y];
return father[x];
}
void merge(int a,int b)
{
a=get(a);
b=get(b);
if(a!=b)
{
father[a]=b;
dist[a]=size[b];
size[b]+=size[a];
}
} int main() {
n=;init(); //每个节点刚开始的祖宗都是自己
merge(,); //1的根节点指向2的根节点,father[1的祖宗]=2的祖宗
merge(,);
merge(,);
merge(,);
get(); //找出1的祖宗
cout<<dist[]+<<endl; //size是包括自己的子孙个数,dist为元素到队首的距离
get();
cout<<dist[]+<<endl;
return ;
}
dist跟merge的顺序有关
并查集 2019年8月10日计蒜客联盟周赛 K.数组的更多相关文章
- 线段树+lazy标记 2019年8月10日计蒜客联盟周赛 C.小A的题
题目链接:https://nanti.jisuanke.com/t/40852 题意:给定一个01串s,进行m次操作,|s|<=1e6,m<=5e5 操作有两种 l r 0,区间[l,r] ...
- 易初大数据 2019年11月10日 spss习题 王庆超
◆1.一个数据文件包含下列数据,5个家庭没有汽车(编码为0),20个家庭有一辆汽车(编码唯1),10个家庭拥有两辆汽车(编码为2)指出下列哪种统计量适用于描述该数据并计算出统计量的值.A A拥有汽车数 ...
- 2019年3月10日 装饰器进阶-模拟session
ser_dic={'username':None,'login':False}#用户字典,反应登入状态,用字典做全局变量 def idf(func):#验证登入信息是否正确 def wrapper(* ...
- 【2019年04月10日】股票的滚动市盈率PE最低排名
仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 新钢股份(SH600782) - 滚动市盈率PE:3.87 - 滚动市净率PB:1.29 - 滚动年化股息收益率:1.31% - 钢铁 ...
- Ubantu创建热点并共享——2019年5月10日更新
只需要两步,参考以下两篇文章: ubuntu16.04上安装配置DHCP服务的详细过程 Ubuntu18.04 创建与编辑热点的方法
- 【蜕变之路】第20天 UUID和时间戳的生成 (2019年3月10日)
Hello,大家好!我是程序员阿飞!今天主要学习的内容是:字符串UUID的随机生成和时间戳的随机生成.好了,直接进入正题. 1.UUID的随机生成 /* * uuid的随机生成方式 ...
- 35.ES6语法介绍——2019年12月24日
2019年12月24日16:22:24 2019年10月09日12:04:44 1. ES6介绍 1.1 新的 Javascript 语法标准 --2015年6月正式发布 --使用babel语法转换器 ...
- [网站公告]3月10日23:00-4:00阿里云SLB升级,会有4-8次连接闪断
大家好,阿里云将于3月10日23:00-4:00对负载均衡服务(SLB)做升级操作,升级期间SLB网络连接会有约4-8次闪断.由此给您带来麻烦,敬请谅解! 阿里云SLB升级公告内容如下: 尊敬的用户: ...
- 2019年5月1日起安卓应用应基于API 26开发,那么API等级是啥?
2019年5月1日起安卓应用应基于API 26开发,那么API等级是啥? 转 https://www.ithome.com/html/android/372234.htm 据泰尔终端实验室公众微信 ...
随机推荐
- jquery swiper3自定义切换效果的方法
jquery swiper3自定义切换效果的方法 <pre> <div class="swiper-slide"> <div class=" ...
- MyBatis --- 映射关系【一对一、一对多、多对多】,懒加载机制
映射(多.一)对一的关联关系 1)若只想得到关联对象的id属性,不用关联数据表 2)若希望得到关联对象的其他属性,要关联其数据表 举例: 员工与部门的映射关系为:多对一 1.创建表 员工表 确定其外键 ...
- 思科获取DHCP过程
主机如何获取DHCP的过程? 地址请求: 客户端发布一个DHCP请求信息,该信息会发给网内所有主机,非DHCP服务器会丢弃信息. 地址提供: DHCP服务端收到该信息后,会从地址池内挑选一个未被使用的 ...
- 深入理解计算机系统 第八章 异常控制流 part1
本章主旨 第八章的目的是阐述清楚应用程序是如何与操作系统交互的(之前章节的学习是阐述应用程序是如何与硬件交互的) 异常控制流 异常控制流,即 ECF(exceptional contril flow) ...
- [LC]206题 Reverse Linked List (反转链表)(链表)
①英文题目 Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5-> ...
- sparkSQL 简介
一.Spark SQL的特点 1.支持多种数据源:Hive.RDD.Parquet.JSON.JDBC等.2.多种性能优化技术:in-memory columnar storage.byte-code ...
- 微擎签名出错 invalid signature
微擎签名出错 错误信息: config:fail,Error: 系统错误,错误码:63002,invalid signature 修改方法: PHP 端 $account_api = WeAccoun ...
- Jquery才可以使用 this 指定当前DOM
Jquery才可以使用 this 指定当前DOM jquery获取并设置它的元素 <div class="shop-item" style="line-height ...
- code migrate
1. 从Git上clone 仓库到本地. git clone --mirror http://gittest:gittest@192.168.1.x/x.git 2. push 到codecommit ...
- Towards Universal Object Detection by Domain Attention
论文及代码 论文地址:https://arxiv.org/abs/1904.04402 代码:http://www.svcl.ucsd.edu/projects/universal-detection ...