Description

Sulotion

首先要对每对咒语机建图,判断机器a是否能生成所有机器b生成的

如果跑一个相同的串,最后结束的点b可输出a不可输出,判断就为否

大概就用这种思路,f[x][y]表示a中跑到x b中跑到y是否可行,然后大概记忆化搜索,只有两种转移

//感觉跑自动机的题目经常要这么(跑到了哪一个结点)表示状态

建图之后可能会有环(a和b生成的一样),于是强连通分量缩点

变成了DAG,然后dp记忆化搜索出答案

Code

一开始边的数组也直接用maxn了,最近怎么总是犯低级错误

 #include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=,maxm=1e4+; int S;
struct box{
int n,m,p[maxn][],ok[maxn];
}a[maxn];
int head[maxn],e[maxm],nxt[maxm],tot;
int adde(int u,int v){
e[++tot]=v,nxt[tot]=head[u];
head[u]=tot;
}
int low[maxn],pre[maxn],clock;
int scc[maxn],size[maxn],cnt,r[maxn],t; int c,d;
int vis[maxn][maxn];
int pd(int x,int y){
if(vis[x][y]) return ;
if(!a[c].ok[x]&&a[d].ok[y]) return ;
vis[x][y]=;
if(!pd(a[c].p[x][],a[d].p[y][])) return ;
if(!pd(a[c].p[x][],a[d].p[y][])) return ;
return ;
} int tarjan(int u){
pre[u]=low[u]=++clock;
r[++t]=u;
for(int i=head[u];i;i=nxt[i]){
int v=e[i];
if(!pre[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(!scc[v]){
low[u]=min(low[u],pre[v]);
}
}
if(pre[u]==low[u]){
++cnt;
while(t){
scc[r[t]]=cnt;
size[cnt]++;
if(r[t--]==u) break;
}
}
} int f[maxn],G[maxn][maxn];
int dfs(int u){
if(f[u]) return f[u];
int ret=;
for(int v=;v<=cnt;v++)
if(G[u][v]) ret=max(ret,dfs(v));
return f[u]=ret+size[u];
} int main(){
int x;
scanf("%d",&S);
for(int k=;k<=S;k++){
scanf("%d%d",&a[k].n,&a[k].m);
for(int i=;i<=a[k].m;i++)
scanf("%d",&x),a[k].ok[x+]=;
for(int i=;i<=a[k].n;i++){
scanf("%d%d",&a[k].p[i][],&a[k].p[i][]);
a[k].p[i][]++,a[k].p[i][]++;
}
} for(int i=;i<=S;i++)
for(int j=;j<=S;j++)
if(i!=j){
memset(vis,,sizeof(vis));
c=i,d=j;
if(pd(,)) adde(c,d);
} for(int i=;i<=S;i++)
if(!pre[i]) tarjan(i); for(int i=;i<=S;i++)
for(int j=head[i];j;j=nxt[j])
if(scc[i]!=scc[e[j]]) G[scc[i]][scc[e[j]]]=; int ans=;
for(int i=;i<=cnt;i++)
ans=max(ans,dfs(i)); printf("%d\n",ans);
return ;
}

【强连通分量】Bzoj1194 HNOI2006 潘多拉的盒子的更多相关文章

  1. [BZOJ1194][HNOI2006][强连通分量Tarjan+dfs]潘多拉的盒子

    [BZOJ1194][HNOI2006]潘多拉的盒子 Input 第一行是一个正整数S,表示宝盒上咒语机的个数,(1≤S≤50).文件以下分为S块,每一块描述一个咒语机,按照咒语机0,咒语机1„„咒语 ...

  2. BZOJ1194: [HNOI2006]潘多拉的盒子(tarjan)

    Description 传说中,有个神奇的潘多拉宝盒.如果谁能打开,便可以拥有幸福.财富.爱情.可是直到真的打开,才发现与之 相随的还有灾难.不幸.其实,在潘多拉制造这个宝盒的时候,设置了一些咒语来封 ...

  3. 图论(Tarjan缩点):BZOJ 1194: [HNOI2006]潘多拉的盒子

    1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 344  Solved: 181[Submit][Stat ...

  4. BZOJ 1194: [HNOI2006]潘多拉的盒子( BFS + tarjan + dp )

    O(S²)枚举2个诅咒机, 然后O(n²)BFS去判断. 构成一个有向图, tarjan缩点, 然后就是求DAG的最长路.. ------------------------------------- ...

  5. 【BZOJ-1194】潘多拉的盒子 拓扑排序 + DP

    1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 456  Solved: 215[Submit][Stat ...

  6. 1194: [HNOI2006]潘多拉的盒子

    1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 464  Solved: 221[Submit][Stat ...

  7. 1194: [HNOI2006]潘多拉的盒子 - BZOJ

    Description  Input 第一行是一个正整数S,表示宝盒上咒语机的个数,(1≤S≤50).文件以下分为S块,每一块描述一个咒语机,按照咒语机0,咒语机1„„咒语机S-1的顺序描述.每一块的 ...

  8. 【bzoj1194】 HNOI2006—潘多拉的盒子

    http://www.lydsy.com/JudgeOnline/problem.php?id=1194 (题目链接) 题意 给出S个自动机,如果一个自动机u的所有状态是另一个自动机v的状态的子集,那 ...

  9. BZOJ 1194: [HNOI2006]潘多拉的盒子 [DP DFA]

    传送门 题意: s个DFA,选出尽量多的自动机a0, a1, a2, . . . , at,使得a1包含a0.a2包 含a1,以此类推.s ≤ 50. DFA的字符集为{0,1},有的节点是输出源,节 ...

随机推荐

  1. Vi 操作命令

    进入vi的命令  vi filename :打开或新建文件,并将光标置于第一行首  vi +n filename :打开文件,并将光标置于第n行首  vi + filename :打开文件,并将光标置 ...

  2. HashMap 深入分析

    /**     *@author annegu     *@date 2009-12-02     */ Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复习一下.网上 ...

  3. tomcat启动非常慢;连接oracle数据库失败,jdbc错误日志提示connection reset;测试主机间网络互通及数据库端口都正常

      [判断确认:这时候大家可能要去检查一下/dev/random 这个设备档案.可以用cat /dev/random 来看它的内容,如果你发现他一直没显示任何内容﹝可能是乱码数字之类的﹞,那就是它出问 ...

  4. 从Freelancer的热门Skill看看你应该学什么?

    以下数据是2012-1-31号数据. Websites, IT & Software: PHP (2402)HTML (1639)SEO(877)MySQL (836)Link Buildin ...

  5. HDU-5705

    Clock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Problem De ...

  6. Apriori算法-频繁项集-关联规则

    计算频繁项集: 首先生成一个数据集 def loadDataSet():     return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]] 测试数据集da ...

  7. springmvc+swagger构建Restful风格文档

    本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档:上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage ...

  8. 解决iframe在移动端(主要iPhone)上的问题

    前言 才发现已经有一段时间没有写博客了,就简单的说了最近干了啥吧.前段时间忙了杂七杂八的事情,首先弄了个个人的小程序,对的,老早就写了篇从零入手微信小程序开发,然后到前段时间才弄了个简单的个人小程序, ...

  9. 服务治理利器Hystrix-理论篇

    引言 现在的大中型应用,很多都在朝着服务化.分布式的方向发展.这有多方面的考虑,比如说,方便治理.便于扩展.服务隔离等等.不过在带来如此多利好的同时,不可避免的也会带来麻烦,比如系统架构复杂.服务依赖 ...

  10. istio收集Metrics和日志信息

    1.切换到istio根目录 cd /data/istio/istio-0.7.1 2.安装prometheus kubectl apply -f install/kubernetes/addons/p ...