蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手。幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印。

封印之门上有一串文字,只包含小写字母,有 kkk 种操作规则,每个规则可以把一个字符变换成另外一个字符。经过任意多次操作以后,最后如果能把封印之门上的文字变换成解开封印之门的文字,封印之门将会开启。

蒜头君战斗力超强,但是不擅计算,请你帮忙蒜头君计算至少需要操作多少次才能解开封印之门。

输入格式

输入第一行一个字符串,长度不大于 100010001000,只包含小写字母,表示封印之门上的文字。

输入第二行一个字符串,只包含小写字母,保证长度和第一个字符串相等,表示能解开封印之门的文字。

输入第三行一个整数 k(0≤k≤676)k(0 \le k \le 676)k(0≤k≤676)。

接下来 kkk 行,每行输出两个空格隔开的字符 aaa, bbb,表示一次操作能把字符 aaa 变换成字符 bbb。

输出格式

如果蒜头君能开启封印之门,输出最少的操作次数。否则输出一行 −1-1−1。

样例输入

abcd
dddd
3
a b
b c
c d

样例输出

6

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#define bug(x) printf("%d****\n",x)
typedef long long ll;
using namespace std;
const int INF=0x3f3f3f3f;
map<char,int> mp;const int maxn=1010;
char s1[maxn],s2[maxn];
int cnt=0;
int head[maxn*2];
struct Edge{int v,nt;
}edge[maxn*2];
void add_edge(int u,int v){edge[cnt].nt=head[u];edge[cnt].v=v;head[u]=cnt++;
}struct Node{int x;int step;bool operator<(const Node& b)const{return step>b.step;//??}
}now,nxt;int vis[maxn*2],dis[maxn*2];
int get_min(int st,int ed){if(st==ed) return 0;memset(vis,0,sizeof(vis));memset(dis,INF,sizeof(dis));dis[st]=0;priority_queue<Node> q;now.x=st,now.step=0;q.push(now);while(!q.empty()){now=q.top();//printf("st:%d ed:%d now:%d s:%d\n",st,ed,now.x,now.step);q.pop();int x=now.x,sp=now.step;if(vis[x]) continue;vis[x]=1;if(x==ed) return sp;for(int i=head[x];i!=-1;i=edge[i].nt){int v=edge[i].v;if(dis[v]>dis[x]+1){dis[v]=dis[x]+1;nxt.x=v,nxt.step=sp+1;q.push(nxt);    }}}return -1;
}int main(){int num=0;memset(head,-1,sizeof(head));scanf("%s",s1);scanf("%s",s2);int len=strlen(s1);for(int i=0;i<len;i++)if(!mp.count(s1[i])){mp[s1[i]]=num++;}for(int i=0;i<len;i++){if(!mp.count(s2[i]))mp[s2[i]]=num++;}
//  printf("a:%d \n",mp['a']);int k;scanf("%d",&k);for(int i=1;i<=k;i++){char a,b;scanf(" %c %c",&a,&b);if(a==b) continue;if(!mp.count(a))mp[a]=num++;if(!mp.count(b))mp[b]=num++; add_edge(mp[a],mp[b]);}int ans=0,wrong=0;for(int i=0;i<len;i++){int tmp=get_min(mp[s1[i]],mp[s2[i]]);if(tmp==-1){wrong=1;break;}ans+=tmp;}  if(wrong)printf("-1\n");elseprintf("%d\n",ans);return 0;
}

H. 封印之门(单向路,不知道脑子怎么了,直接就是双向路)相关推荐

  1. 2018 蓝桥杯省赛 B 组模拟赛(一)H.封印之门 最短路

    蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印. 封印之门上有一串文字,只包含小写字母, ...

  2. 2018 蓝桥杯省赛 B 组模拟赛(一)--- H. 封印之门(最短路)

    题目描述 蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印. 封印之门上有一串文字,只包含 ...

  3. 计蒜客2018 蓝桥杯省赛 B 组模拟赛(一)-H题封印之门

    蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印. 封印之门上有一串文字,只包含小写字母, ...

  4. 2018 蓝桥杯省赛 B 组模拟赛(一) 封印之门+最短路径之Floyd

    题目: 蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印. 封印之门上有一串文字,只包含小 ...

  5. 蓝桥杯--封印之门( Floyd算法)

    蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有 一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印.封印之门上有一串 文字,只包含小写字母 ...

  6. 计蒜客-封印之门【floyd】

    蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印. 封印之门上有一串文字,只包含小写字母, ...

  7. 计蒜客-封印之门(简单Floyd应用)

    蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印. 封印之门上有一串文字,只包含小写字母, ...

  8. 计蒜客 封印之门(最短路,floyd)

    封印之门 蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印. 封印之门上有一串文字,只包含 ...

  9. 2018 蓝桥杯省赛 B 组模拟赛(一)--封印之门

    题目链接:https://nanti.jisuanke.com/t/A1594 蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以 ...

最新文章

  1. 第八节 字符串的插入
  2. (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)
  3. HihoCoder - 1465 后缀自动机五·重复旋律8(后缀自动机)
  4. 1岁确诊脑瘫,“轮椅博士”,毕业了!
  5. java打印等腰梯形
  6. ora-01489 字符串连接的结果过长 解决方案
  7. jquery 后代元素_在jQuery中查找元素的所有后代
  8. 用ssh反向隧道访问内网机器
  9. html+css基础-2-盒子模型、选择器优先级、新增伪元素、display:none
  10. Python打造一款属于自己的翻译词典
  11. MySQL查询某一天数据
  12. TypeScript基础入门之Symbols
  13. 机器学习(三):如何理解最大似然估计MLE与最大后验估计MAP
  14. 【UVA 815 --- Flooded!】
  15. EF 通用帮助类 含分页 Lambda 拼接表达式
  16. 电子招投标系统源码之了解电子招标投标全流程
  17. 学习Java未来就业前景和方向如何?
  18. cpp c++编写代码块 有颜色 好看些
  19. WPF工控组态软件之管道和冷却风扇开发
  20. linux挂载移动硬盘乱码

热门文章

  1. Python|单链表基本操作
  2. 【MYSQL的QA】
  3. 计算机应用基础18秋在线作业2奥鹏,[东北师范大学]《计算机应用基础》18秋在线作业1(100分)...
  4. 数据库监控工具及相关知识
  5. 黑屏助手V1.0(本本不能手动关闭显示器?不想屏保?)
  6. 动手写批量邮件发送器
  7. Unity il2cpp API 调用实践
  8. 个人怎么才能申请专利?
  9. 如何使用客户端 JavaScript 将视频剪辑转换为 GIF 文件
  10. 安卓内存教程技术交流(一):内存特征码读写原理分析