BZOJ4267 : 小强的颜色
首先剔除$1$号心情不能到达的无用心情,然后采用分割法进行DFA的最小化。
每次遍历所有集合,将集合中和集合中第一个心情行为或者转移所在集合不同的心情放入新集合中。
最后按字典序依次给每个集合编号即可。
因为最多$O(N)$次分离,每次遍历时间复杂度为$O(NP)$。
故总时间复杂度为$O(N^2P)$。
#include<cstdio>
const int N=1010;
int p,m,n,i,j,k,x,a[N][30],cnt,len[N],g[N][N],pos[N],id[N],q[N],all;bool vis[N],flag;
inline bool equal(int x,int y){
if(a[x][0]!=a[y][0])return 0;
for(int i=1;i<=p;i++)if(pos[a[x][i]]!=pos[a[y][i]])return 0;
return 1;
}
void dfs(int x){
if(vis[x])return;
vis[x]=1;
g[1][++len[1]]=x;
for(int i=1;i<=p;i++)dfs(a[x][i]);
}
int main(){
scanf("%d%d%d",&p,&m,&n);
for(i=1;i<=n;i++)for(j=1;j<=p;j++)scanf("%d",&a[i][j]);
for(i=1;i<=n;i++)scanf("%d",&a[i][0]);
dfs(cnt=1);
while(1){
flag=0;
for(i=1;i<=cnt;i++)for(j=1;j<=len[i];j++)pos[g[i][j]]=i;
for(i=1;i<=cnt;i++)if(len[i]>1){
for(j=2;j<=len[i];j++)if(!equal(g[i][1],g[i][j]))break;
if(j>len[i])continue;
cnt++,k=1;
for(j=2;j<=len[i];j++)if(!equal(g[i][1],g[i][j]))g[cnt][++len[cnt]]=g[i][j];
else g[i][++k]=g[i][j];
len[i]=k;
flag=1;
break;
}
if(!flag)break;
}
printf("%d\n",cnt);
id[1]=q[1]=all=1;
for(i=1;i<=cnt;i++){
x=g[q[i]][1];
for(j=1;j<=p;j++){
k=pos[a[x][j]];
if(!id[k])q[id[k]=++all]=k;
printf("%d%c",id[k],j<p?' ':'\n');
}
}
for(i=1;i<=cnt;i++)printf("%d%c",a[g[q[i]][1]][0],i<cnt?' ':'\n');
return 0;
}
BZOJ4267 : 小强的颜色的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- ie6背景透明的设置方法 ie6背景颜色透明和png图像透明解决方法
IE6浏览器,让我们又爱又恨.爱它的是,可以让我们写的代码的时候,可以更标准,恨的是,它有太多无厘头的IE6常见bug(详情点击),让我们焦头烂额.现在现在用百度浏览器调查,国内占有率不到6%了,但是 ...
- 小强学渲染之OpenGL渲染管线详析
什么是OpenGL? OpenGL是一套图形硬件的软件API接口库,它直接和GPU交互,将3D场景渲染绘制到2D屏幕上.总结说,OpenGL的功能是将程序中定义的各种2D或3D模型绘制到帧缓存中,或者 ...
- 小强学渲染之OpenGL的CPU管线
读到这里,应该对OpenGL渲染管线有了初步简单了解.下面着重分析CPU管线,即逻辑控制中心做了什么,这部分还是容易理解的.如下图: 一,将数据加载到显存中. 这是由GPU是访问显存中的数据决定的.因 ...
- 用神奇的currentColor制作简洁的颜色动画效果
先上一个兼容性总结图:老版本ie可以直接用复杂方法了,套用某表情包的话: 2016年了,做前端你还考虑兼容IE6?你这简直是自暴自弃! 好了,知道了兼容性,我们可以放心的使用了. 在CSS3中扩展了 ...
- HTML5轻松实现搜索框提示文字点击消失---及placeholder颜色的设置
在做搜索框的时候无意间发现html5的input里有个placeholder属性能轻松实现提示文字点击消失功能,之前还傻傻的在用js来实现类似功能... 示例 <form action=&quo ...
- 深入理解CSS六种颜色模式
前面的话 赏心悦目的颜色搭配让人感到舒服,修改元素颜色的功能让人趋之若鹜.但颜色规划不当,会让网站用户无所适从.颜色从<font color="">发展至今,保留了很多 ...
- EasyPR--开发详解(5)颜色定位与偏斜扭转
本篇文章介绍EasyPR里新的定位功能:颜色定位与偏斜扭正.希望这篇文档可以帮助开发者与使用者更好的理解EasyPR的设计思想. 让我们先看一下示例图片,这幅图片中的车牌通过颜色的定位法进行定位并从偏 ...
- 为革命保护视力 --- 给 Visual Studio 换颜色
“为革命,保护视力,预防近视,眼保健操开始......” 这个应该是最老版本的眼保健操了,你听过? 一堆废话 且不说上面这个眼保健操到底有木有用,让眼睛放松下还是很有必要的,尤其是现在天天对着不是手机 ...
随机推荐
- 数据结构C++实现代码-顺序表
参考:https://blog.csdn.net/ebowtang/article/details/43094041 //seqList.h// //包含顺序表中的声明// #include<i ...
- STL容器之优先队列
STL容器之优先队列 优先级队列,以前刷题的时候用的比较熟,现在竟然我只能记得它的关键字是priority_queue(太伤了).在一些定义了权重的地方这个数据结构是很有用的. 先回顾队列的定义:队列 ...
- Ubuntu安装TensorFlow
使用清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/ 下载. 在主界面右侧找到[相关链接]->[使用帮助],然后在出现的页面左侧找到Tensor ...
- axios简单使用
介绍 我在使用vue的时候使用到了axios,vue 1.0的版本作者推荐使用vue-resource,到了vue 2.0作者建议使用axios,此篇文章只是我在使用axios时候做的笔记,我遇到的一 ...
- 山寨版 WP8.1 Cortana 启动 PC
8.1 dev preview 发布以来 Cortana 很受关注 前一段看到有视频演示用 Cortana 来启动 PC 看视频也是启动第三方应用实现的,简单来弄其实就是个语音启动应用 + 网络唤醒么 ...
- Git 从 master 分支拉新分支开发
一. 切换到被copy的分支(master),并且从远端拉取最新版本 $git checkout master $git pull 二.从当前分支拉copy开发分支 $git checkout -b ...
- linux下几个常用软件
Ubuntu 软件包地址 https://packages.ubuntu.com/ 一. 字体 不管是雅黑还是宋体,从windows cp过来后, 直接双击打开并安装 二. Meld 可视的diff和 ...
- dos文件(夹)复制命令:copy和xcopy
1.copy命令 将一份或多份文件复制到另一个位置. COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B] [+ s ...
- Flink--3种分区方式
partitionByHash //TODO partitionByHash val data = new mutable.MutableList[(Int, Long, String)] data. ...
- idea工具maven生命周期clean,install,package等区别
idea工具maven projects里面有9种生命周期,生命周期是包含在一个项目构建中的一系列有序的阶段. 一.最常用的两种打包方法: 1.clean,package(如果报错,很可能就是jar依 ...