#include <cstdio>
#include <cstring>
#include <stack>
#include <iostream>
using namespace std;
#define N 1005 int first[N] , in[N] , rec[N] , vis[N] , k;
char str[N][]; struct Node
{
int y , next;
}node[N<<]; void add_edge(int x,int y)
{
in[y]++;
node[k].y = y , node[k].next = first[x];
first[x] = k++;
} int dag(int cnt , int n)
{
int copy_in[N];
for(int i = ; i<n ; i++) copy_in[i] = in[i];
int t = ;
stack<int> s;
for(int i = ; i<n ; i++){
if(!copy_in[i] && vis[i])
{
// cout<<"there: "<<i<<" "<<cnt<<" "<<n<<endl;
t++;
s.push(i);
}
} int flag = ;
for(int i = ; i<cnt ; i++){
if(s.empty()){
return -;
}
if(s.size() > ) flag = ;
int u = s.top();
s.pop();
rec[i] = u;
for(int i=first[u] ; i!=- ; i=node[i].next){
int v = node[i].y;
copy_in[v]--;
if(!copy_in[v]) s.push(v);
}
}
if(cnt == n && t == && flag) return ;
else return ;
} int main()
{
// freopen("a.in" , "rb" , stdin);
int n,m,a,b;
while(~scanf("%d%d",&n,&m)){
if(n== && m==) break;
memset(first , - , sizeof(first));
memset(in , , sizeof(in));
memset(vis , , sizeof(vis)); for(int i = ; i<m ; i++){
scanf("%s",str[i]);
} int cnt = ;//计算当前传入的所有边中含有的点数
k=;
for(int i= ; i<m ; i++){
//add edge
a = str[i][] - 'A';
if(!vis[a]){
cnt++;
vis[a]=;
}
b = str[i][] - 'A';
if(!vis[b]){
cnt++;
vis[b]=;
}
// cout<<"here: "<<a<< " "<<b<<endl;
add_edge(a,b); int falg = dag(cnt , n);
if(falg == -)
{
printf("Inconsistency found after %d relations.\n" , i+);
break;
} else if(falg == )
{
printf("Sorted sequence determined after %d relations: " , i+);
for(int i=;i<n;i++)
{
char c = 'A'+rec[i];
cout<<c;
}
printf(".\n");
break;
} else{
if(i<m-) continue;
printf("Sorted sequence cannot be determined.\n");
}
}
}
return ;
}

这道题就是逐步判断是否找到合适的顺序,找到了就停止将顺序输出

这里最大的问题是,在有向图中我们进行DAG查询的过程中,每一步都得保证只有一个点没有入度,否则多点没有入度,分不清先后顺序

POJ1094 / ZOJ1060的更多相关文章

  1. ACM/ICPC 之 拓扑排序范例(POJ1094-POJ2585)

    两道拓扑排序问题的范例,用拓扑排序解决的实质是一个单向关系问题 POJ1094(ZOJ1060)-Sortng It All Out 题意简单,但需要考虑的地方很多,因此很容易将code写繁琐了,会给 ...

  2. POJ1094[有向环 拓扑排序]

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33184   Accepted: 11 ...

  3. nyoj349 poj1094 Sorting It All Out(拓扑排序)

    nyoj349   http://acm.nyist.net/JudgeOnline/problem.php?pid=349poj1094   http://poj.org/problem?id=10 ...

  4. POJ1094 拓扑排序

    问题:POJ1094   本题考查拓扑排序算法   拓扑排序:   1)找到入度为0的点,加入已排序列表末尾: 2)删除该点,更新入度数组.   循环1)2)直到 1. 所有点都被删除,则找到一个拓扑 ...

  5. [poj1094]Sorting It All Out_拓扑排序

    Sorting It All Out poj-1094 题目大意:给出一些字符串之间的大小关系,问能否得到一个唯一的字符串序列,满足权值随下标递增. 注释:最多26个字母,均为大写. 想法:显然,很容 ...

  6. POJ- 1094 Sorting It All Out---拓扑排序是否唯一的判断

    题目链接: https://vjudge.net/problem/POJ-1094 题目大意: 该题题意明确,就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列.是典型的拓扑排序,但输出格式上 ...

  7. POJ1094——拓扑排序和它的唯一性

    比较模板的topological-sort题,关键在于每个元素都严格存在唯一的大小关系,而一般的拓扑排序只给出一个可能解,这就需要每趟排序的过程中监视它是不是总坚持一条唯一的路径. 算法导论里面的拓扑 ...

  8. poj1094 拓扑 Sorting It All Out

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29744   Accepted: 10 ...

  9. poj1094

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29539   Accepted: 10 ...

随机推荐

  1. egrep命令的实现 分类: 编译原理 2014-06-01 23:41 329人阅读 评论(0) 收藏

    本程序实现了egrep命令,首先将正则表达式转换为NFA,并实现模拟NFA的算法. 本程序使用flex实现词法分析,bison实现语法分析 若给定的一行字符串中存在一个字串能被该NFA接受,则输出整行 ...

  2. 浏览器 cookie session

    浏览器的cookie被禁用的话,则服务端的session不起作用 session是基于cookie实现的, 还是办理会员卡的问题, cookie客户端支持,即客户手上的会员卡记录了所有信息, sess ...

  3. 一个小方法解决RGBA不兼容IE8

    原网页http://blog.csdn.net/leihope_/article/details/70158902 要在一个页面中设置一个半透明的白色div.这个貌似不是难题,只需要给这个div设置如 ...

  4. Android开发中使用startActivityForResult()方法从Activity A跳转Activity B出现B退出时A也同时退出的解决办法

    最近一个 App 中用到了 startActivityForResult() 方法,使用的时候却出现了一些问题,比如我在 Activity A 中调用该方法向 Activity B 中跳转,如果 B  ...

  5. [转]Sublime Text操作

    原文地址:http://www.madongdong.me/sublime-text3%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/ 作者:马东东 前言(Prologue) ...

  6. JS中的对象之原型

    对象 ECMAScript做为一个高度抽象的面向对象语言,是通过_对象_来交互的.即使ECMAScript里边也有_基本类型_,但是,当需要的时候,它们也会被转换成对象. 一个对象就是一个属性集合,并 ...

  7. R in action读书笔记(22)第十六章 高级图形进阶(下)

    16.2.4 图形参数 在lattice图形中,lattice函数默认的图形参数包含在一个很大的列表对象中,你可通过trellis.par.get()函数来获取,并用trellis.par.set() ...

  8. t470安装win7

    终于把win7安装好了,写了个文档 https://files.cnblogs.com/files/cookies9/t470%E5%AE%89%E8%A3%85win7%E6%96%B9%E6%B3 ...

  9. vscode配置python环境

    修改 tasks.json 配置文件 找到.vscode文件夹下的tasks.json配置文件,拖进 Visual Studio Code 中进行修改. 也可以直接按Ctrl + Shift + p后 ...

  10. PHP文件及目录考察点

    文件读取/写入操作 fopen()函数 用来打开一个文件,打开时需要指定打开模式 打开模式 模式 |作用 --- |--- 'r' |只读方式打开,将文件指针指向文件头. 'r+' |读写方式打开,将 ...