题目

有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母。
现在怎么恢复原来的文档呢!小y很聪明,他在其他没有感染病毒的机器上,生成了一个由若干单词构成的字典,字典中的单词是按照字母顺序排列的,他把这个文件拷贝到自己的机器里,故意让它感染上病毒,他想利用这个字典文件原来的有序性,找到病毒替换字母的规律,再用来恢复其它文档。
现在你的任务是:告诉你被病毒感染了的字典,要你恢复一个字母串。

输入格式
第一行为整数K(≤50000),表示字典中的单词个数。
以下K行,是被病毒感染了的字典,每行一个单词。
最后一行是需要你恢复的一串字母。
所有字母均为小写。

输出格式
输出仅一行,为恢复后的一串字母。当然也有可能出现字典不完整、甚至字典是错的情况,这时请输出一个0。

样例

样例输入
6
cebdbac
cac
ecd
dca
aba
bac
cedab
样例输出
abcde

思路


这一道题最先看的时候,发现这什么鬼题?
之后我看了题解后,我终于知道怎么套进 用拓扑排序了


我们可以使用stringstringstring来存储输入的字符串。
我们可以比较相邻两个词第一个不相同的字母,后面就不能比较了,因为我们无法确定它们的顺序。
因为拥有字符串之间的大小关系,所以可以快快乐乐 建图了。之后就可以使用拓扑排序,把病毒的字母大小的排列方式拿出来,同时再与真实字符串相联系起来(可以用MapMapMap),最后求出正确字符串。

在这当中,一定要注意000的情况:
1、若其中没有字母入度为零,即代表有环,那么就无解(想一想,一个最小的却要求比最开始的要大,肯定不可能)
2、若最后字符串中映射不完整,那么就代表所给词典不完整


这一题,主要突破点在于字符串字符的有序性,所以可以做出来。

代码

#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
const int M=10005;
int in[M],qwq[M];
map<char,char> ma;
vector<int> G[M];
int main(){int n;scanf("%d",&n);string s[M],need;for(int i=1;i<=n;i++){cin>>s[i];}cin>>need;for(int i=2;i<=n;i++){int len=min(s[i].length(),s[i-1].length());for(int j=0;j<len;j++){if(s[i][j]!=s[i-1][j]){int x=s[i-1][j]-'a'+1,y=s[i][j]-'a'+1;G[x].push_back(y);in[y]++;qwq[y]++,qwq[x]++;break;} }}int tot=0;for(int i=1;i<=n;i++){if(qwq[i]) tot++; }for(int i=1;i<=tot;i++){int j=1;while(j<27&&(in[j]||!qwq[j])) j++;if(j>26){printf("0\n");return 0;}ma[j+'a'-1]='a'+i-1;in[j]=-1;int siz=G[j].size();for(int k=0;k<siz;k++){int id=G[j][k];in[id]--;}}string ans;for(int i=0;i<need.length();i++){if(!ma[need[i]]){printf("0\n");return 0;}ans[i]=ma[need[i]];}for(int i=0;i<need.length();i++){cout<<ans[i];}return 0;
}

病毒(virus) 题解 - 拓扑排序相关推荐

  1. 病毒virus(拓扑排序)

    ~目录啊~ 题目 思路 Code 题目 描述 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母. ...

  2. 【BZOJ-2938】病毒 Trie图 + 拓扑排序

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 609  Solved: 318 [Submit][Status][ ...

  3. PAT甲级1146 Topological Order :[C++题解]拓扑排序、结构体存边、图论

    文章目录 题目分析 题目链接 题目分析 来源:acwing 拓扑排序是对有向无环图的顶点的一种排序,它使得若存在一条从顶点A到顶点B的路径A→B,则在排序中顶点B出现在顶点A的后面. 根据概念,可以想 ...

  4. 【bzoj1565】[NOI2009]植物大战僵尸 拓扑排序+最大权闭合图

    原文地址:http://www.cnblogs.com/GXZlegend/p/6808268.html 题目描述 输入 输出 仅包含一个整数,表示可以获得的最大能源收入.注意,你也可以选择不进行任何 ...

  5. 题解报告:hihoCoder #1175:拓扑排序·二

    题目链接:https://hihocoder.com/problemset/problem/1175 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学 ...

  6. 洛谷 P3244 / loj 2115 [HNOI2015] 落忆枫音 题解【拓扑排序】【组合】【逆元】

    组合计数的一道好题.什么非主流题目 题目背景 (背景冗长请到题目页面查看) 题目描述 不妨假设枫叶上有 \(n​\) 个穴位,穴位的编号为 \(1\sim n​\).有若干条有向的脉络连接着这些穴位. ...

  7. 【基础练习】【拓扑排序】codevs3294 车站分级题解

    题目来源:NOIP2013 普及第四题 题目描写叙述 Description 一条单向的铁路线上,依次有编号为1, 2, -, n的n个火车站.每一个火车站都有一个级别,最低为1级.现有若干趟车次在这 ...

  8. Mr. Kitayuta‘s Technology CodeForces - 505D(并查集+拓扑排序或dfs找环) 题解

    题目  Shuseki Kingdom is the world's leading nation for innovation and technology. There are n cities ...

  9. 深度优先,广度优先,拓扑排序(实战题解)

    前言 深度遍历和广度遍历在算法占比很大,主要是解决图的问题(树也是图的一种) 一.深度优先遍历 1.深度遍历(DFS)解决什么问题 DFS解决的是连通性的问题,即给定两⼀个起始点(或某种起始状态)和⼀ ...

最新文章

  1. WindowsPhone 7.8 Tiles 3 : 7.8的Tiles利器mangopollo
  2. c++ 异步下获取线程执行结果_【分享吧】C++11多线程库介绍
  3. Linux各个文件夹的作用~~~非常实用!!
  4. javascript时间戳和日期字符串相互转换
  5. HDU 3861 The King’s Problem (强连通缩点+DAG最小路径覆盖)
  6. consulAPI服务的注册源码
  7. JavaEE基础(三)
  8. @程序员,如何在五分钟内构建个人网盘服务?| 技术头条
  9. arduino步进电机程序库_【MM32 eMiniBoard测评报告】+驱动步进电机
  10. 简单工厂模式-Simple Factory Pattern
  11. SQL server 表中如何创建索引?
  12. 2015 2020 r4烧录卡 区别_每分时长来看2010年与2015年与2020年澳网男单决赛的区别...
  13. OBS+SRS+centos7搭建局域网直播推流服务器
  14. 高仿网易云音乐一(可扫描本地音乐播放)
  15. python只读打开文件_关于python:只读文件的第一行?
  16. 手机相机好坏测试软件,教你一分钟教你看懂手机拍照好坏!
  17. linux kernle 同步原语
  18. Multimodal Learing with Deep Boltzmann Machines
  19. c语言多线程收发数据,c语言多线程队列读写
  20. 最长不重复子串及其C++实现

热门文章

  1. IPv6协议原理与实践
  2. 编程实现:输入一个3位数字,分别输出其百位、十位、个位。
  3. Codeforces Round #654 (Div. 2) F.Raging Thunder(线段树/区间合并)
  4. 什么是正向设计和逆向设计?
  5. onvif获取摄像头的流媒体地址完整流程
  6. QT 手写识别功能的实现
  7. idea trycatch快捷键
  8. 明解C语言示例代码5-1 数组
  9. 研究表明亚马逊公司正在进军印度数据中心市场
  10. 2020杭电暑期多校02 10 - Lead of Wisdom (HDU6772) 常数坑