hdu 5487 Difference of Languages BFS
来源:互联网 发布:魔灵召唤淘宝代充 编辑:程序博客网 时间:2024/05/18 01:32
题意:给你两个DFA,每个状态在另一个字母的作用下变成另一个状态。其字典序最小的一个字符串,使得其中一个变成可接受的状态,另一个不是。
方法:bfs枚举最后的状态,并记录第一个状态。
#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include<queue>#pragma comment(linker,"/STACK:1024000000,1024000000")using namespace std;const int N=1005;const int M=26;bool vis[N][N];struct state{ bool ac[N];int nex[N][M]; int n,m,K; void init(){ scanf("%d%d%d",&n,&m,&K); int u,v;char c[3]; memset(ac,0,sizeof(ac)); for(int i=0;i<=n;i++) for(int j=0;j<M;j++) nex[i][j]=n; for(int i=0;i<K;i++){ scanf("%d",&u);ac[u]=true; } for(int i=0;i<m;i++){ scanf("%d%d%s",&u,&v,c); nex[u][c[0]-'a']=v; } }}A,B;struct node{ int x,y; node(int _x=0,int _y=0):x(_x),y(_y){}}Cur;queue<node>q;int pre[N][N];void out(int x,int y){ int xx,yy,c,st; c=pre[x][y]%M; st=pre[x][y]/M; xx=st/N;yy=st%N; if(pre[xx][yy]!=-1) out(xx,yy); printf("%c",'a'+c);}bool solve(){ if(A.ac[0]^B.ac[0]){ printf("\n");return true; } while(!q.empty())q.pop(); memset(vis,0,sizeof(vis)); //memset(pre,-1,sizeof(pre)); for(int i=0;i<=A.n;i++) for(int j=0;j<=B.n;j++) pre[i][j]=-1; vis[0][0]=true; q.push(node(0,0)); while(!q.empty()){ Cur=q.front();q.pop(); int p=Cur.x*N+Cur.y; for(int i=0;i<M;i++){ int x=A.nex[Cur.x][i]; int y=B.nex[Cur.y][i]; if(vis[x][y])continue; vis[x][y]=true; pre[x][y]=p*M+i; if(A.ac[x]^B.ac[y]){ out(x,y); printf("\n"); return true; } q.push(node(x,y)); } } return false;}void work(){ int T; scanf("%d",&T); int tt=1; while(T--){ printf("Case #%d: ",tt++); A.init();B.init(); if(!solve())printf("0\n"); }}int main(){ //freopen("data_in.txt","r",stdin); work(); return 0;}
0 0
- hdu 5487 Difference of Languages(bfs)
- hdu 5487 Difference of Languages BFS
- hdu 5487 Difference of Languages BFS
- HDOJ 5487 Difference of Languages
- HDU 2471 History of Languages(自动机BFS)
- Processing学习笔记--Difference of Processing from traditional programming languages
- hdu 5486 Difference of Clustering
- hdu 5486 Difference of Clustering
- HDU 5486(Difference of Clustering-聚类)
- hdu 5486 Difference of Clustering(暴力)
- HDU 5486 Difference of Clustering 图论
- Timeline of programming languages
- Comparison of programming languages
- UVa10887 - Concatenation of Languages
- 10887 - Concatenation of Languages
- uva10887Concatenation of Languages
- 10887 - Concatenation of Languages
- uva10887Concatenation of Languages
- HDU 3836
- 让用户做测试员 利用IIS自定义错误页
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Hadoop介绍
- Linux Shell中的变量-自定义变量
- hdu 5487 Difference of Languages BFS
- iOS开发-XIB、Storyboard操作小技巧
- 值传递and引用传递
- centos 6.5 搭建dhcp服务器
- 课程学习-软件工程
- 数据库的主键 和外键
- ROM、RAM、DRAM、SRAM和FLASH的区别
- HDU - 3480 Division(斜率优化)
- Bootstrap框架学习