牛客练习赛39D

n,m<=5e4;
首先操作2用并查集就行了。题解说的好啊!
考虑操作一,连的两个点如果同色,直接合并,然后这个颜色的联通块-1,然后合并bitset,就是或一下。bitset维护的是相连的异色结点。
如果两个点异色,那么我们就不管他们,直接在两个bitset里分别把对方设为1。
对于操作三 直接 (b[x]&b[y]).count(); 就行了。
#include <bits/stdc++.h>
using namespace std;
const int N = 5e4+;
int fa[N];
bitset<> b[N];
int find(int a){
return a==fa[a]?a:fa[a]=find(fa[a]);
}
int n,m,op,x,y,c[N]; int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
int hei=,bai;
for(int i=;i<=n;i++){
fa[i]=i;cin>>c[i];
hei+=c[i];
}
bai=n-hei;
while (m--){
cin>>op;
if(op==){
cin>>x>>y;
int xx=x,yy=y;
x=find(x);y=find(y);
if(x==y)continue;
if(c[xx]==){
if(c[yy]==)fa[y]=x,hei--,b[x]|=b[y];
else b[x][yy]=,b[y][xx]=;
} else{
if(c[yy]==)fa[y]=x,bai--,b[x]|=b[y];
else b[x][yy]=,b[y][xx]=;
}
} else if(op==){
cin>>x;
if(!x)cout<<bai<<endl;
else cout<<hei<<endl;
} else{
cin>>x>>y;
x=find(x);y=find(y);
if(x==y)cout<<-<<endl;
else{
cout<<(b[x]&b[y]).count()<<endl;
}
}
}
}
牛客练习赛39D的更多相关文章
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
- [堆+贪心]牛客练习赛40-B
传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费 x_i 的时间,同时完成第 i 个任务的时间不 ...
- 牛客练习赛 29 E 位运算?位运算!(线段树)
题目链接 牛客练习赛29E 对$20$位分别建立线段树.首先$1$和$2$可以合起来搞(左移右移其实是等效的) 用个lazy标记下.转移的时候加个中间变量. $3$和$4$其实就是区间$01$覆盖操 ...
- 牛客练习赛22C Bitset
牛客练习赛22C 一共有 n个数,第 i 个数是 xi xi 可以取 [li , ri] 中任意的一个值. 设 ,求 S 种类数. 感觉二进制真是一个神奇的东西. #include <iost ...
随机推荐
- Wordpress上一篇文章和下一篇文章
<div class="chapter"> <div class="prev"><?php previous_post_link( ...
- yuv rgb 互转 公式 及算法
1 前言 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用的过程,所以在不同的应用领域中为了更好更准确的 ...
- dubbo学习汇总
1. dubbo官网 http://dubbo.io dubbo 作为一个阿里不用的框架,提供了非常多的资料.在分布式框架设计这方面. 2. 其他地方:http://shiyanjun.cn/arch ...
- 条件式变分自编码机(Conditional Variational Autoencoders)
Conditional Variational Autoencoders 条件式变换自编码机 摘要: Conditional Variational Autoencoders --- 条件式变换自编码 ...
- jQuery插件备忘
jQuery BlockUI Plugin 遮罩插件 ...
- Go语言排序算法实现
// Algorithm project Algorithm.go package Algorithm // 冒泡排序 func BubbleSort(a []int) { n := len(a) ; ...
- 什么是ip代理
1.什么是代理IP(代理服务器),代理IP(代理服务器)有什么用? 代理服务器英文全称是(Proxy Server),也叫做代理IP,其功能就是代理网络用户去取得网络信息.形象的说:它是网络信息的中转 ...
- Git上传空文件夹
git上传的文件夹为空的时候 1,先删除空的文件夹 参考:https://www.cnblogs.com/wang715100018066/p/9694532.html 2,这个只能说是技巧不能说是方 ...
- Quartz小记(一):Elastic-Job - 分布式定时任务框架
Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.去掉了和dd-job中的监控和ddframe接入规范部分.该项目基于成熟的开源产品Quartz和Zooke ...
- LeetCode: Gray Code [089]
[题目] The gray code is a binary numeral system where two successive values differ in only one bit. Gi ...