博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1483: [HNOI2009]梦幻布丁
阅读量:6735 次
发布时间:2019-06-25

本文共 1456 字,大约阅读时间需要 4 分钟。

1 #include
2 #include
3 #include
4 #define M 1000008 5 using namespace std; 6 int n,next[M],ft[M],m,sum,head[M],st[M],s[M],c[M]; 7 int main() 8 { 9 scanf("%d%d",&n,&m);10 for(int i=1;i<=n;i++)11 {12 int a1;13 scanf("%d",&c[i]);14 if(c[i]!=c[i-1])15 sum++;16 ft[c[i]]=c[i];17 if(!head[c[i]])18 st[c[i]]=i;19 s[c[i]]++;20 next[i]=head[c[i]];21 head[c[i]]=i;22 }23 for(int i=1;i<=m;i++)24 {25 int a1,a2,a3;26 scanf("%d",&a1);27 if(a1==2)28 printf("%d\n",sum);29 else30 {31 scanf("%d%d",&a2,&a3);32 if(a2==a3)continue;33 if(s[ft[a2]]>s[ft[a3]])34 swap(ft[a2],ft[a3]);35 int a=ft[a2],b=ft[a3];36 if(!s[a])37 continue;38 s[b]+=s[a];39 for(int j=head[a];j;j=next[j])40 {41 if(c[j+1]==b)42 sum--;43 if(c[j-1]==b)44 sum--;45 }46 for(int j=head[a];j;j=next[j])47 c[j]=b;48 next[st[a]]=head[b];49 head[b]=head[a];50 head[a]=s[a]=st[a]=0;51 }52 }53 return 0;54 }

链表合并,启发式合并,由于是启发式合并,所以还要开一个数组记录实际是哪个颜色。

转载于:https://www.cnblogs.com/xydddd/p/5271174.html

你可能感兴趣的文章
IDC评述网:《2013年度香港域名注册总量报告》
查看>>
Python进程缓存
查看>>
基于PCDN技术的无延时直播方案
查看>>
阿里云移动端播放器高级功能---直播时移
查看>>
javascript string 转unicode unicode 转string
查看>>
opencv ubuntu golang
查看>>
From Apprentice To Artisan 翻译 20
查看>>
我的友情链接
查看>>
Nagios和Centreon的安装部署
查看>>
shel脚本--监控网卡
查看>>
集中管理服务器 PUPPET(一) 部署 与 添加节点
查看>>
rhca 333 network
查看>>
Android 好推荐
查看>>
CentOS系统安装(下):kickstart文件及引导镜像的制作
查看>>
System Center 2012 R2实例3—SCOM之SharePoint全方位监视3—报告服务器
查看>>
tomcat&memcached实现session共享
查看>>
爱技术,爱分享,爱博报!分享大赛赢大奖!
查看>>
Firefox和Chrome谷歌浏览器显示正在连接打开网页缓慢的解决方法
查看>>
Gulp-useref IE条件语句导致页面build:js不能替换的解决办法
查看>>
java加解密-数字证书
查看>>