当前位置:网站首页>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;
}
边栏推荐
猜你喜欢

ADSP21489工程中LDF文件配置详解

CaDDN code debugging

迅为RK3568开发板编译Buildroot-全自动编译

UE4 创建暂停和结束游戏UI

【云原生】什么是CI/CD? | CI/CD 带来的好处

Crawler_crawl wasde monthly supply and demand balance table (example)

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

PyQt5_pyqtgraph鼠标在折线图上画直线

通关剑指 Offer——剑指 Offer II 008. 和大于等于 target 的最短子数组

OpenPCDet environment configuration of 3 d object detection and demo test
随机推荐
【Gazebo入门教程】第一讲 Gazebo的安装、UI界面、SDF文件介绍
你要的在这里,自己维护的石墨文档
CODESYS指针型变量编程应用(配方)
洗牌(DAY 100)
Excel如何解密工作表保护
【C语言程序】求直角三角形边长
falco 【1】入门
UE4 利用Mixamo自动绑骨并导入虚幻4
单调队列模板 滑动窗口
关于地图GIS开发事项的一次实践整理(上)
WiFi、蓝牙、zigbee锁与NB、Cat.1锁的区别
UE4 AI行为树实现随机和跟随移动
PyQt5_pyqtgraph鼠标在折线图上画直线
学内核之四:关于内核与硬件的衔接
UE4 创建开始游戏界面UI
爬虫_爬取wasde月度供需平衡表(实例)
P1192 台阶问题
The practice of alibaba, data synchronization component canal
ADSP21489数据手册表摘要
Qt FAQ