首先剔除$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 : 小强的颜色的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. ie6背景透明的设置方法 ie6背景颜色透明和png图像透明解决方法

    IE6浏览器,让我们又爱又恨.爱它的是,可以让我们写的代码的时候,可以更标准,恨的是,它有太多无厘头的IE6常见bug(详情点击),让我们焦头烂额.现在现在用百度浏览器调查,国内占有率不到6%了,但是 ...

  3. 小强学渲染之OpenGL渲染管线详析

    什么是OpenGL? OpenGL是一套图形硬件的软件API接口库,它直接和GPU交互,将3D场景渲染绘制到2D屏幕上.总结说,OpenGL的功能是将程序中定义的各种2D或3D模型绘制到帧缓存中,或者 ...

  4. 小强学渲染之OpenGL的CPU管线

    读到这里,应该对OpenGL渲染管线有了初步简单了解.下面着重分析CPU管线,即逻辑控制中心做了什么,这部分还是容易理解的.如下图: 一,将数据加载到显存中. 这是由GPU是访问显存中的数据决定的.因 ...

  5. 用神奇的currentColor制作简洁的颜色动画效果

    先上一个兼容性总结图:老版本ie可以直接用复杂方法了,套用某表情包的话:  2016年了,做前端你还考虑兼容IE6?你这简直是自暴自弃! 好了,知道了兼容性,我们可以放心的使用了. 在CSS3中扩展了 ...

  6. HTML5轻松实现搜索框提示文字点击消失---及placeholder颜色的设置

    在做搜索框的时候无意间发现html5的input里有个placeholder属性能轻松实现提示文字点击消失功能,之前还傻傻的在用js来实现类似功能... 示例 <form action=&quo ...

  7. 深入理解CSS六种颜色模式

    前面的话 赏心悦目的颜色搭配让人感到舒服,修改元素颜色的功能让人趋之若鹜.但颜色规划不当,会让网站用户无所适从.颜色从<font color="">发展至今,保留了很多 ...

  8. EasyPR--开发详解(5)颜色定位与偏斜扭转

    本篇文章介绍EasyPR里新的定位功能:颜色定位与偏斜扭正.希望这篇文档可以帮助开发者与使用者更好的理解EasyPR的设计思想. 让我们先看一下示例图片,这幅图片中的车牌通过颜色的定位法进行定位并从偏 ...

  9. 为革命保护视力 --- 给 Visual Studio 换颜色

    “为革命,保护视力,预防近视,眼保健操开始......” 这个应该是最老版本的眼保健操了,你听过? 一堆废话 且不说上面这个眼保健操到底有木有用,让眼睛放松下还是很有必要的,尤其是现在天天对着不是手机 ...

随机推荐

  1. Pthon面向对象之基础

    命名空间 class Course: language = 'Chinese' def __init__(self,teacher,name,period,price): self.teacher = ...

  2. 【TensorFlow】基于ssd_mobilenet模型实现目标检测

    最近工作的项目使用了TensorFlow中的目标检测技术,通过训练自己的样本集得到模型来识别游戏中的物体,在这里总结下. 本文介绍在Windows系统下,使用TensorFlow的object det ...

  3. A - Exposition CodeForces - 6E

    题目链接:https://vjudge.net/contest/202699#problem/A 题意 给一个n个元素的序列,从中挑出最长的子序列,要求子序列中元素差的最大值不超过k.问有几个最长子序 ...

  4. 2018软工实践作业八之UML设计

    1. 团队信息 队名:小白吃队 成员: 后敬甲 031602409 卢泽明 031602328 蔡文斌 031602301 葛亮 031602617 刘浩 031602423 黄泽 031602317 ...

  5. centos 6.5升级内核到3.1

    1.查看本机内核版本 [root@localhost ~]# uname -r 2.6.32-358.el6.x86_64 2.安装含有内核软件的源 步骤一:导入证书 [root@localhost ...

  6. asp.net MVC5为WebAPI添加命名空间的支持

    前言 默认情况下,微软提供的MVC框架模板中,WebAPI路由是不支持Namespace参数的.这导致一些比较大型的项目,无法把WebApi分离到单独的类库中. 本文将提供解决该问题的方案. 微软官方 ...

  7. MySQL 存储过程中分页

    MySQL数据库中,自定义存储过程查询表中的数据,带有分页功能.具体实例如下代码: 1 DROP PROCEDURE IF EXISTS `sampledb`.`proc_GetPagedDataSe ...

  8. Python_tuple部分功能介绍

    x.count():元素在元组内的个数 x.index():元素在元组内的位置

  9. net core体系-Xamarin-1概要

    大家在开发领域都知道Java是跨平台的,但是很多人认为.NET是只能在Windows下运行,不具有跨平台的特性,这种说法其实是不妥的. .NET其实在设计之初也是考虑像Java一样跨平台的,我们知道. ...

  10. mybatis拦截器处理

    1.自定义注释 package com.hsfw.backyard.biz.security.authority; import java.lang.annotation.*; /** * 数据权限过 ...