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

题目大意:构造一个字母表,使得按照你的字母表能够满足输入的是按照字典序排下来。

递归建图:竖着切下来,将每个名字的第x个字母从上到下连接建图。然后求拓扑排序。

之所以要拓扑排序,因为要判断在x-1里面有a-->b  在x中有b-->a,这样就形成了一个环。这样一来,就不能够构造字母表了。

【经验教训】:在递归建图的函数中开了两个数组,用来记录字母第一次出现和最后一次出现的位置。。结果就RE在12上。。今后尽量不要在递归函数中开数组。。

 #include <cstdio>
 #include <algorithm>
 #include <bitset>
 #include <set>
 #include <vector>
 #include <iterator>
 #include <cstring>
 #include <map>
 #include <cctype>
 #include <iostream>
 #include <string>
 #include <stdexcept>
 using namespace std;

 int n;
 ];
 bool hasAns = true;
 vector<];
 ],topo[],t;

 void solve(int l,int r,int x){
     if( l>=r ) return;
     if( !hasAns ) return;
     for(int i=l;i<=r;i++){
         if( x>=names[i].size() ) {
             hasAns = false;
             return;
         }
         ;
         for(;j<=r;j++){
             if( names[i][x]==names[j][x] ){
                 continue;
             } else {
                 break;
             }
         }
         <x+&&i<j- ) i++;
         solve(i,j-,x+);
         i = j-;
     }

     for(int i=l;i<r;i++) {
         ][x] ) continue;
         G[names[i][x]-][x]-'a');
     }
 }

 bool dfs(int u){
     c[u] = -;
     ;i<G[u].size();i++){
         int v = G[u][i];
          ) continue;
          ) return false;
         else if(!c[v] && !dfs(v) ) return false;
     }
     c[u] = ; topo[--t] = u;
     return true;
 }

 bool toposort(){
     t = ;
     memset(c,,sizeof(c));
     ;u>=;u--) if(!c[u])
         if(!dfs(u)) return false;
     return true;
 }

 int main(){
     cin >> n;
     ;i<n;i++) cin >> names[i];
     solve(,n-,);
     if( !hasAns ) {
         puts("Impossible");
         ;
     }
     bool hasAns = toposort();
     if( !hasAns ) {
         puts("Impossible");
         ;
     }
     ;i<;i++){
         putchar('a'+topo[i]);
     }
     puts("");

     ;
 }

[CF #290-C] Fox And Names (拓扑排序)的更多相关文章

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

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

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

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

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

    题目链接:http://codeforces.com/problemset/problem/510/C Fox Ciel is going to publish a paper on FOCS (Fo ...

  4. 拓扑排序 Codeforces Round #290 (Div. 2) C. Fox And Names

    题目传送门 /* 给出n个字符串,求是否有一个“字典序”使得n个字符串是从小到大排序 拓扑排序 详细解释:http://www.2cto.com/kf/201502/374966.html */ #i ...

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

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

  6. Codeforces Round #290 (Div. 2) C. Fox And Names dfs

    C. Fox And Names 题目连接: http://codeforces.com/contest/510/problem/C Description Fox Ciel is going to ...

  7. CF #CROC 2016 - Elimination Round D. Robot Rapping Results Report 二分+拓扑排序

    题目链接:http://codeforces.com/contest/655/problem/D 大意是给若干对偏序,问最少需要前多少对关系,可以确定所有的大小关系. 解法是二分答案,利用拓扑排序看是 ...

  8. CF 274D Lovely Matrix 拓扑排序,缩点 难度:2

    http://codeforces.com/problemset/problem/274/D 这道题解题思路: 对每一行统计,以小值列作为弧尾,大值列作为弧头,(-1除外,不连弧),对得到的图做拓扑排 ...

  9. C. Fox And Names

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

随机推荐

  1. 【Beta】第六次任务发布

    PM #103 #85 日常管理&dev版宣传&新增报告管理后台. 后端 #101 完成收藏功能 完成管理员权限表的生成和接入(按位压缩权限表) 验收条件:收藏功能能够正常使用.能够区 ...

  2. python 学习笔记

    >>> help(print)Help on built-in function print in module builtins: print(...) print(value, ...

  3. Netty中的坑(下篇)

    其实这篇应该叫Netty实践,但是为了与前一篇名字保持一致,所以还是用一下坑这个名字吧. Netty是高性能Java NIO网络框架,在很多开源系统里都有她的身影,而在绝大多数互联网公司所实施的服务化 ...

  4. 【20140113-2】MyEclipse生成javadoc时出错:编码GBK的不可映射字符

    今天生成java doc文档时,出现了如下所示的错误: 正在装入软件包 com.wisdom.test 的源文件...F:\workspace\StringUtils\src\com\wisdom\t ...

  5. APP链接请求电话

    1.使用OpenURL执行:[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:07551111&qu ...

  6. 《Linux/Unix系统编程手册》

    TCP的TIME_WAIT状态,超时时间为2倍MSL(IP报文超过TTL前最大生存时间,BSD规范为30s,RFC1122建议为2分钟).

  7. hibernate -inverse

    one to many inverse=false只能设置维护关联关系的多的一方, inverse属性: 默认为false,表示本方维护关联关系. 如果为true,表示本方不维护关联关系(并不意味着对 ...

  8. nodejs环境的搭建(linux环境centos6.5)

    更新yum # yum update 新建用户 # adduser user设置密码 # passwd user 允许用户通过ssl远程访问 # vi /etc/ssh/sshd_config 在文末 ...

  9. Jmeter发送JDBC请求

    下午花了两个小时研究了一下Jmeter发送JDBC请求,现在把基本操作流程分享一下. 做JDBC请求,首先需要两个jar包:mysql驱动-mysql-connector-java-5.1.13-bi ...

  10. QT开发应用程序的欢迎界面

    主界面启动太慢,通常要10秒以上,所以想加个欢迎界面,等程序加载好再显示主界面. 主界面(类名为MainWindow)启动慢的原因是构造函数需要执行大量初始化的工作. 创建了Welcome类作为欢迎界 ...