#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. 区间DP UVA 10453 Make Palindrome

    题目传送门 /* 题意:问最少插入多少个字符使得字符串变成回文串 区间DP:dp[i][j]表示[l, r]的字符串要成为回文需要插入几个字符串,那么dp[l][r] = dp[l+1][r-1]; ...

  2. Dock

    搭建本地 Registry - 每天5分钟玩转 Docker 容器技术(20) 小结: dock 版本号 分为 3位,比如1.1.2 就分为1, 1.1,1.1,2 这个几个版本 这种 tag 方案使 ...

  3. 关于JTable的使用

    JTable是个JavaSwing中的表格控件,可以用来显示数据和编辑数据.这里讲一下我的使用心得. JavaSwing讲究MVC理念,而这个JTable也可以说是个迷你的MVC模型.JTable只是 ...

  4. WPF 实时绘图的逻辑

    实时绘图实际上是两个线程.外部线程直接用thread,只有到绘图那个逻辑才用绘图控件的mycanvas2.Dispatcher.Invoke. 或者说,INVOKE并不是开线程,只是一个绘图的委托而已 ...

  5. MVC中使用MVCPager简单分页

    一.建立数据库以及建立MVC项目 自己随便建立一个数据库,并且添加数据.我建立的数据库如下. 二.建立LINQ to SQL映射. 然后一步步点确定 三.编写代码 在Controllers中建立控制器 ...

  6. Android学习笔记(十四) Handler理论补充

    一.如何下载Android源码 在SDK Manager中选中Sources for Android SDK. 二.ThreadLocal初步介绍 1)执行ThreadLocal对象(static f ...

  7. 针对windowsserver 创建iis站点访问出错的解决方案(HTTP 错误 500.19 - Internal Server Error)

    错误如下:   服务器错误 Internet信息服务 7.0 错误摘要HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详 ...

  8. 01C#程序结构及编辑编译环境

    C#程序结构及编辑编译环境 程序结构 C# 中的组织结构的关键概念是程序 (program).命名空间 (namespace).类型 (type).成员 (member) 和程序集 (assembly ...

  9. JavaSE-10 多态

    学习要点 多态的优势和应用场合 父类和子类之间的类型转换 instanceof运算符的使用 父类作为方法形参实现多态 父类作为返回值实现多态 使用多态的原因 需求描述: 在宠物管理系统中,宠物饿了,需 ...

  10. windows 下安装 RabbitMQ

    一.安装 RabbitMQ 前需要先安装 Erlang http://www.erlang.org/downloads 下下载对应版本的安装文件进行安装. 安装完成后配置环境变量: ERLANG_HO ...