codeforces 510 C Fox And Names【拓扑排序】
题意:给出n串名字,表示字典序从小到大,求符合这样的字符串排列的字典序
先挨个地遍历字符串,遇到不相同的时候,加边,记录相应的入度
然后就是bfs的过程,如果某一点没有被访问过,且入度为0,则把它加入队列中,并将它指向的节点的入度减去1
另外如果len[i]<len[i-1],说明第i个字符串是i-1个字符串的前缀,但是它还排在后面,这样肯定不存在符合的字典序,直接输出“Impossible”
#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int mod=;
const int maxn=; int e[maxn],first[maxn],next[maxn],ans[maxn],len[maxn],vis[maxn],in[maxn];
char s[][];
int ecnt; void addedges(int u,int v){
e[ecnt]=v;
next[ecnt]=first[u];
first[u]=ecnt;
in[v]++;
ecnt++;
} int main(){ // freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int n;
cin>>n; memset(first,-,sizeof(first));
for(int i=;i<=n;i++){
cin>>s[i];
len[i]=strlen(s[i]);
} int j;
ecnt=;
for(int i=;i<=n;i++){
for(j=;j<min(len[i],len[i-]);j++){
if(s[i-][j]!=s[i][j]){
addedges(s[i-][j]-'a',s[i][j]-'a');
break;
}
}
if(len[i]<len[i-]&&j==len[i]){
printf("Impossible\n");
return ;
}
} memset(vis,,sizeof(vis)); for(int i=;i<=;i++){
int jj=;
int j;
for( j=;j<;j++){
if(!vis[j]&&in[j]==){
vis[j]=;
ans[i]=j;
for(int k=first[j];k!=-;k=next[k]){
in[e[k]]--;
}
jj=j;
break;
}
}
if(jj==){//jj的值没有发生改变,说明这 一点找不到符合的拓扑序
printf("Impossible\n");
return ;
}
} for(int i=;i<=;i++)
printf("%c",ans[i]+'a');
printf("\n");
return ;
}
codeforces 510 C Fox And Names【拓扑排序】的更多相关文章
- (CodeForces 510C) Fox And Names 拓扑排序
题目链接:http://codeforces.com/problemset/problem/510/C Fox Ciel is going to publish a paper on FOCS (Fo ...
- CodeForces 510C Fox And Names (拓扑排序)
<题目链接> 题目大意: 给你一些只由小写字母组成的字符串,现在按一定顺序给出这些字符串,问你怎样从重排字典序,使得这些字符串按字典序排序后的顺序如题目所给的顺序相同. 解题分析:本题想到 ...
- [CF #290-C] Fox And Names (拓扑排序)
题目链接:http://codeforces.com/contest/510/problem/C 题目大意:构造一个字母表,使得按照你的字母表能够满足输入的是按照字典序排下来. 递归建图:竖着切下来, ...
- CF Fox And Names (拓扑排序)
Fox And Names time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- CF510C Fox And Names——拓扑排序练习
省委代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> # ...
- 【codeforces 510C】Fox And Names
[题目链接]:http://codeforces.com/contest/510/problem/C [题意] 给你n个字符串; 问你要怎么修改字典序; (即原本是a,b,c..z现在你可以修改每个字 ...
- Codeforces Beta Round #29 (Div. 2, Codeforces format) C. Mail Stamps 离散化拓扑排序
C. Mail Stamps Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem ...
- CodeForces 1213F (强联通分量分解+拓扑排序)
传送门 •题意 给你两个数组 p,q ,分别存放 1~n 的某个全排列: 让你根据这两个数组构造一个字符串 S,要求: (1)$\forall i \in [1,n-1],S_{pi}\leq S _ ...
- Codeforces 510 A.Fox and Snake
题目链接:http://codeforces.com/contest/510/problem/A A. Fox And Snake time limit per test2 seconds memor ...
随机推荐
- C# 比较方法
public int Compare(Product first, Product second) { return PartialComparer.RefernceCompare(first, se ...
- Spring mvc json null
http://blog.csdn.net/zdsdiablo/article/details/9429263
- iOS NSString 和NSData 转换
NSString 转换成NSData 对象 NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncodin ...
- ListView中EditText的数据加载错乱的问题
我在ListView中用BaseAdapter的getView()方法加载适配器,每个Item里有一个TextView和一个EditText,当我在第一个EditText里面输入数据,比如1234时, ...
- 基础DOM和CSS操作(三)
CSS方法 jQuery不但提供了CSS的核心操作方法,比如.css()..addClass()等.还封装了一些特殊功能的CSS操作方法,我们分别来了解一下. width()方法 方法名 描述 wid ...
- excel设置下拉菜单,并且不同值会显示不同颜色
工作中常常要用的excel,每次都会有新的需求,然后不会,然后百度,然后过段时间可能就又忘了,于是就想说,自己记录下来~~~因为自己用的都是2010,其实哪个版本都差不多,都是应该可以找到相应的按钮滴 ...
- [网页设计]Ajax、Comet与Websocket--转
从http协议说起 1996年IETF HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展.这种分布式.无状态.基于TCP的请求/响应式.在 ...
- Oracle客户端安装及配置
Oracle客户端安装及配置 1.安装orcale客户端(Oracle_client_10 )选择inst...方式安装(不是管理员方式) 2.在安装路径下新建目录network\admin 然后新建 ...
- iOS开发--UITableView
-.建立 UITableView DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; [Data ...
- 美丽渐变色的Form
一直都非常喜欢渐变色的界面,但是没想到漂亮的渐变Form原来这么简单...实在是没想到...看来我不仅技术水平低,脑袋里的创意也是空空如也... --------------------------- ...