题目链接:http://codeforces.com/problemset/problem/510/C

Fox Ciel is going to publish a paper on FOCS (Foxes Operated Computer Systems, pronounce: "Fox"). She heard a rumor: the authors list on the paper is always sorted in the lexicographical order.

After checking some examples, she found out that sometimes it wasn't true. On some papers authors' names weren't sorted in lexicographical order in normal sense. But it was always true that after some modification of the order of letters in alphabet, the order of authors becomes lexicographical!

She wants to know, if there exists an order of letters in Latin alphabet such that the names on the paper she is submitting are following in the lexicographical order. If so, you should find out any such order.

Lexicographical order is defined in following way. When we compare s and t, first we find the leftmost position with differing characters: si ≠ ti. If there is no such position (i. e. s is a prefix of t or vice versa) the shortest string is less. Otherwise, we compare characters si and ti according to their order in alphabet.

Input
The first line contains an integer n ( ≤ n ≤ ): number of names. Each of the following n lines contain one string namei ( ≤ |namei| ≤ ), the i-th name. Each name contains only lowercase Latin letters. All names are different. Output
If there exists such order of letters that the given names are sorted lexicographically, output any such order as a permutation of characters 'a'–'z' (i. e. first output the first letter of the modified alphabet, then the second, and so on). Otherwise output a single word "Impossible" (without quotes). Examples
input rivest
shamir
adleman
output
bcdefghijklmnopqrsatuvwxyz
input tourist
petr
wjmzbmr
yeputons
vepifanov
scottwu
oooooooooooooooo
subscriber
rowdark
tankengineer
output
Impossible
input petr
egor
endagorion
feferivan
ilovetanyaromanova
kostka
dmitriyh
maratsnowbear
bredorjaguarturnik
cgyforever
output
aghjlnopefikdmbcqrstuvwxyz
input car
care
careful
carefully
becarefuldontforgetsomething
otherwiseyouwillbehacked
goodluck
output
acbdefhijklmnogpqrstuvwxyz

题意:给出几个排序好的字符串,输出字符串的排序规则,如没有输出  Impossible

#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <queue>
using namespace std; #define met(a,b) memset(a,b,sizeof(a))
#define ll long long
#define N 123
struct node
{
int v,next;
}s[N];
int a[N],num[N],vis[N],k;
int len[N],in[N];
void add(int u,int v)
{
s[k].v=u;
s[k].next=a[v];
a[v]=k++;
in[u]++;
}
char str[N][N]; int main()
{
int n;
scanf("%d",&n);met(a,-);k=;
for(int i=;i<n;i++)
{
scanf("%s",str[i]);
len[i]=strlen(str[i]);
}
met(in,);int j;
for(int i=;i<n;i++)
{
for(j=;j<min(len[i],len[i-]);j++)
{
if(str[i][j]!=str[i-][j])///两个字符串的相同位置比较
{
int x=str[i][j]-'a';
int y=str[i-][j]-'a';
add(x,y);
break;
}
}
if(len[i]<len[i-] && j==len[i])///前一个字符串比后一个长,输出不可能
{
printf("Impossible\n");
return ; }
}
met(vis,);
for(int i=;i<=;i++)
{
int jj=;
int j;
for(int j=;j<;j++)///一个一个字符查找符合的
{
if(!vis[j] && in[j]==)
{
vis[j]=;
num[i]=j;
for(int k=a[j];k!=-;k=s[k].next)
in[s[k].v]--; jj=j;
break;
}
}
if(jj==)///中间有断开的,有一个字符没有比较
{
printf("Impossible\n");
return ;
}
}
for(int i=;i<=;i++)
printf("%c",num[i]+'a');
puts(""); return ;
}

(CodeForces 510C) Fox And Names 拓扑排序的更多相关文章

  1. CodeForces 510C Fox And Names (拓扑排序)

    <题目链接> 题目大意: 给你一些只由小写字母组成的字符串,现在按一定顺序给出这些字符串,问你怎样从重排字典序,使得这些字符串按字典序排序后的顺序如题目所给的顺序相同. 解题分析:本题想到 ...

  2. [CF #290-C] Fox And Names (拓扑排序)

    题目链接:http://codeforces.com/contest/510/problem/C 题目大意:构造一个字母表,使得按照你的字母表能够满足输入的是按照字典序排下来. 递归建图:竖着切下来, ...

  3. CF Fox And Names (拓扑排序)

    Fox And Names time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  4. CF510C Fox And Names——拓扑排序练习

    省委代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> # ...

  5. codeforce 510C Fox And Names(拓扑排序)

    Fox And Names time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  6. Codeforces Round #290 (Div. 2) 拓扑排序

    C. Fox And Names time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  7. CodeForces 909E Coprocessor(无脑拓扑排序)

    You are given a program you want to execute as a set of tasks organized in a dependency graph. The d ...

  8. codeforces 915D Almost Acyclic Graph 拓扑排序

    大意:给出一个有向图,问能否在只去掉一条边的情况下破掉所有的环 解析:最直接的是枚举每个边,将其禁用,然后在图中找环,如果可以就YES,都不行就NO 复杂度O(N*M)看起来不超时 但是实现了以后发现 ...

  9. Codeforces 919D:Substring(拓扑排序+DP)

    D. Substring time limit: per test3 seconds memory limit: per test256 megabytes inputstandard: input ...

随机推荐

  1. ASP.NET- 查找Repeater控件中嵌套的控件

    如何在Repeater的HeaderTemplate和FooterTemplate模板中寻找控件?在Repeater的ItemTemplate模板中的控件,我们可以用Items属性来遍历行并用Find ...

  2. 一个实际的sonar代码检查的配置文件

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  3. 函数中的$input

    $input 在此属于一个特殊变量,一般在函数中用于接收输入 function FindWindowsFolder { $input | where-object {$_.Name -eq " ...

  4. 理解shared_ptr<T> ---2

    1.引用计数字段不能放在资源管理类中.我们的解决办法是,把引用计数和资源绑在一起,进行二次封装.但是这样存在一个大问题,不同类型的资源管理类不能兼容.也就是说,shared_ptr<Dog> ...

  5. jquery html标签的链式语法

    <div id="ProductNet"> <table border='0' cellspacing='2' cellpadding='0' style='te ...

  6. Android在MediaMuxer和MediaCodec用例 - audio+video

    在Android多媒体类,MediaMuxer和MediaCodec这是一个相对年轻,他们是JB 4.1和JB 4.3据介绍. 前者被用来产生一个混合的音频和视频的多媒体文件.的缺点是,现在可以只支持 ...

  7. android学习日记11--音频播放类

    一.android 音频播放类 MediaPlayer和SoundPool都可以用来播放音频.区别是MediaPlayer占用资源高,延迟时间高,播放长音乐的,并且不能同时播放多个音乐,而SoundP ...

  8. firefly 问题

    1.G:\servers\Python27\Lib\mimetypes.py reload(sys) sys.setdefaultencoding('gb18030') 2.G:\servers\Py ...

  9. Microsoft Office Visio Professional 2007密钥

    Microsoft Office Visio Professional 2007 产品密钥: W2JJW-4KYDP-2YMKW-FX36H-QYVD8

  10. XMemcached使用示例--转

    Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端 ...