当前位置:网站首页>2022河南萌新联赛第(四)场:郑州轻工业大学 A - ZZULI
2022河南萌新联赛第(四)场:郑州轻工业大学 A - ZZULI
2022-08-02 04:31:00 【WA_自动机】
A - ZZULI
这道题由于要计算连通块大小,可以使用并查集,关键在于如何去合并。
对于 a , b , c a,b,c a,b,c , ( a , b ) (a,b) (a,b) 合并后 ( b , c ) (b,c) (b,c),与 ( a , b ) (a,b) (a,b) 合并 ( a , c ) (a,c) (a,c) 合并是没有区别的,那么要合并的一组数就用第一个去合并一遍。
所以拿第一个 Z 向后合并一遍,遇见 Z 、U 、L、 I 就合并;
再拿第一个 U 按照规则向后合并一遍,再拿第一个 L 按照规则向后合并一遍,再拿第一个 I 按照规则向后合并一遍即可
#include<bits/stdc++.h>
using namespace std;
const int N = 1000010;
char s[N];
int f[N],sz[N];
int d[4];
int find(int x)
{
return f[x]==x?x:f[x]=find(f[x]);
}
void merge(int x,int y)
{
x=find(x),y=find(y);
if(x==y) return;
f[x]=y,sz[y]+=sz[x];
}
int main()
{
unordered_map<char,int> mp;
mp['Z']=0,mp['U']=1,mp['L']=2,mp['I']=3;
cin>>(s+1);
int n=strlen(s+1);
for(int i=1;i<=n;i++) f[i]=i,sz[i]=1;
for(int i=1;i<=n;i++)
if(mp.count(s[i]))
{
int pos=mp[s[i]];
if(d[pos]==0) d[pos]=i;
else merge(d[pos],i);
for(int j=0;j<pos;j++)
if(d[j])
merge(d[j],i);
}
int ans=0;
for(int i=1;i<=n;i++)
ans=max(ans,sz[i]);
cout<<ans<<endl;
return 0;
}
边栏推荐
猜你喜欢

WiFi、蓝牙、zigbee锁与NB、Cat.1锁的区别

W25Q16 存储器(Flash)

Crawler_crawl wasde monthly supply and demand balance table (example)

【Gazebo入门教程】第一讲 Gazebo的安装、UI界面、SDF文件介绍

“数字化重构系统,搞定 CEO 是第一步”

C - The Domino Effect(dfs+回溯)

UE4 创建暂停和结束游戏UI

从头开始实现YOLOV3

Minecraft 1.18.1、1.18.2模组开发 23.3D动画盔甲制作

Anatomy of Unreal Playback System (Part 1)
随机推荐
PyQt5_pyqtgraph mouse draws straight lines on line charts
力扣练习——43 路径总和
How to quickly delete the compressed package password?
力扣练习——40 区间和的个数
MySQL存储函数详解
力扣练习——45 二叉树的锯齿形层次遍历
Use the advanced timer of GD32F207 to generate hidden bugs in PWM waves
AFMG SysTune1.3.7使用图解
找倍数(DAY 98)
ADSP21489仿真:Failed to set breakpoint: Can‘t set breakpoints in the current state: Running
七月阅读:《刘慈欣科幻短篇小说集Ⅰ》笔记
2022 Huawei Software Elite Challenge (Preliminary) - Summary
300M级mysql数据库跨版本迁移流程
Unreal回放系统剖析(上)
11种你需要了解的物联网(IoT)协议
OpenPCDet environment configuration of 3 d object detection and demo test
LeetCode 23: 合并K个升序链表
C语言:结构体总结
Nuscenes数据集总结(下)
Camtasia 2022简体中文版屏幕录像和视频编辑软件