#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. 二分查找+数学 HDOJ 4342 History repeat itself

    题目传送门 题意:计算从1开始到第n个非完全平方数的开方和 分析:设第n个非完全平方数的值为a,x * x < a < (x+1) * (x+1),而且易得(tmp = sqrt (a) ...

  2. 题解报告:hdu 2058 The sum problem

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2058 问题描述 给定一个序列1,2,3,...... N,你的工作是计算所有可能的子序列,其子序列的总 ...

  3. Liferay门户部署至Apusic Application Server域

    Liferay默认情况下部署在Tomcat容器中,因项目原因需要将Liferay部署至金蝶Apusic Application Server应用服务器中,部署过程如下,特此记录. 1.liferay- ...

  4. 对char类型数组的英文字母进行冒泡排序

    import java.util.Arrays; import java.util.Scanner; public class Demo02 { public static void main(Str ...

  5. Codeforces Round #179 (Div. 1)

    A 直接线段树过的 两遍 貌似大多是标记过的..注意long long #include <iostream> #include <cstdio> #include <c ...

  6. C#菜鸟正则表达式一

    LZ菜鸟,仅整理笔记,顺带记录一下,谓之增加印象. LZ认为,没必要太纠结原理,模型, 屌丝能用就对了,剩下的事情用多了自然会去探索. 中文:正则表达式,英文:Regular  ExPression, ...

  7. AJPFX关于File类复习

    file是一个路径,分为相对路径(eclipse)和绝对路径:1.构造方法有:File(String pathname ),File(String parent ,String child),File ...

  8. windows 安装绿色版mysql

    (1)到官网下载绿色版mysql:http://dev.mysql.com/downloads/mysql/ (2)下载好后,放在F:\mysql,解压出来 (3)进入到mysql-5.6.19-wi ...

  9. sql创建发送邮件账号

    ALTER PROCEDURE dbo.sx_pro_autoEmail_account AS begin Declare @my_profile_name varchar(50) Declare @ ...

  10. 这是一条立了Flag的不归路

    时间2017年7月11日 14:48:40 首次激活博客园的博客来进行学习记录,立下了不算远大的小目标,下一步就是要一步一步的往前走. Java是目前最普遍的使用语言之一,作为一名测试,本应该去学习更 ...