传送门 题意: s个DFA,选出尽量多的自动机a0, a1, a2, . . . , at,使得a1包含a0.a2包 含a1,以此类推.s ≤ 50. DFA的字符集为{0,1},有的节点是输出源,节点数n ≤ 50. 判断出包含关系后就是裸的最长路,求$SCC$后$DP$就好了 重点在判断包含: $n$实在太小了,我们直接枚举所有的自动机,然后两个同时从起点开始$bfs$所有情况看看是否在某个状态一个有输出另一个没有 复杂度$O(n^4)$ 注意: $Candy?$这个沙茶$bfs$没有判断$…
1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 344  Solved: 181[Submit][Status][Discuss] Description Input 第一行是一个正整数S,表示宝盒上咒语机的个数,(1≤S≤50).文件以下分为S块,每一块描述一个咒语机,按照咒语机0,咒语机1„„咒语机S-1的顺序描述.每一块的格式如下. 一块的第一行有两个正整数n,m.分别表示该咒语机中元件的个数.咒…
O(S²)枚举2个诅咒机, 然后O(n²)BFS去判断. 构成一个有向图, tarjan缩点, 然后就是求DAG的最长路.. ----------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<stack&g…
题面:洛谷传送门 BZOJ传送门 标签里三个算法全都是提高组的,然而..这是一道神题 我们把这道题分为两个部分解决 1.找出所有咒语机两两之间的包含关系 2.求出咒语机的最长上升序列 我们假设咒语机$a,b$满足$a\in b$ 如果这个条件不成立,说明存在一个串$S$,$a$能输出,$b$不能输出 一个咒语机能产生的字符串可能是无限长的,直接枚举字符串肯定不行 考虑转化问题 我们构造另外一个图,图中每个点是一个二元组$(x,y)$ 我们暴力枚举咒语机$a$中的一个元件$x$,$b$中的一个元件…
1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 464  Solved: 221[Submit][Status][Discuss] Description Input 第一行是一个正整数S,表示宝盒上咒语机的个数,(1≤S≤50).文件以下分为S块,每一块描述一个咒语机,按照咒语机0,咒语机1„„咒语机S-1的顺序描述.每一块的格式如下. 一块的第一行有两个正整数n,m.分别表示该咒语机中元件的个数.咒…
Description  Input 第一行是一个正整数S,表示宝盒上咒语机的个数,(1≤S≤50).文件以下分为S块,每一块描述一个咒语机,按照咒语机0,咒语机1„„咒语机S-1的顺序描述.每一块的格式如下. 一块的第一行有两个正整数n,m.分别表示该咒语机中元件的个数.咒语源输出元的个数(1≤m≤n≤50). 接下来一行有m个数,表示m个咒语源输出元的标号(都在0到n-1之间). 接下来有n行,每一行两个数.第i行(0≤i≤n-1)的两个数表示pi,0和pi,1(当然,都在0到n-1之间).…
Description 传说中,有个神奇的潘多拉宝盒.如果谁能打开,便可以拥有幸福.财富.爱情.可是直到真的打开,才发现与之 相随的还有灾难.不幸.其实,在潘多拉制造这个宝盒的时候,设置了一些咒语来封锁住灾难与不幸.然而,直到 科技高度发达的今天,人们才有希望弄懂这些咒语.所以说,上千年来,人们只得忍受着各种各样的疾病和死亡的 痛苦.然而,人类的命运从此改变了.经过数十年的研究,NOI组织在最近终于弄清楚了潘多拉咒语的原理.咒语 是由一个叫做咒语机的机器产生的.用现在的名词来解释,咒语机其实就是…
http://www.lydsy.com/JudgeOnline/problem.php?id=1194 (题目链接) 题意 给出S个自动机,如果一个自动机u的所有状态是另一个自动机v的状态的子集,那么我们连一条有向边(u,v),问最长链.(事实上还要求方案) Solution 神题.如果我们知道了包含关系,那么对于不需要求方案的bzoj上的,我们只需要Floyd一遍就可以了,求方案的其实也只需要topsort后dp. 具体细节:http://blog.csdn.net/ww140142/art…
Description Sulotion 首先要对每对咒语机建图,判断机器a是否能生成所有机器b生成的 如果跑一个相同的串,最后结束的点b可输出a不可输出,判断就为否 大概就用这种思路,f[x][y]表示a中跑到x b中跑到y是否可行,然后大概记忆化搜索,只有两种转移 //感觉跑自动机的题目经常要这么(跑到了哪一个结点)表示状态 建图之后可能会有环(a和b生成的一样),于是强连通分量缩点 变成了DAG,然后dp记忆化搜索出答案 Code 一开始边的数组也直接用maxn了,最近怎么总是犯低级错误…
题目描述 题解: 题目的描述比较长,理解起来也有一定难度.仔细读题后我们发现整个任务可以分成两个部分:找出咒语机之间所有的升级关系.求最长升级序列. 1. 求升级关系: 容易看出,咒语机i可以抽象成一个图Gi,其顶点集Vi为ni个元件,每个顶点发出两条边——“0”边和“1”边,分别表示将信号加“0”和加“1”. 我们枚举两个咒语机A.B(A≠B),判断B是否是A的升级.最简单的想法是生成出A和B的所有咒语源,然后判断前者是否为后者的子集.但是,一个咒语机产生的咒语源可能有无限多个,无法逐一判断.…