POJ 1094 Sorting It All Out(拓扑排序判环)

题目链接:http://poj.org/problem?id=1094

题目:

Description

An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequence A, B, C, D implies that A < B, B < C and C < D. in this problem, we will give you a set of relations of the form A < B and ask you to determine whether a sorted order has been specified or not.

Input

Input consists of multiple problem instances. Each instance starts with a line containing two positive integers n and m. the first value indicated the number of objects to sort, where 2 <= n <= 26. The objects to be sorted will be the first n characters of the uppercase alphabet. The second value m indicates the number of relations of the form A < B which will be given in this problem instance. Next will be m lines, each containing one such relation consisting of three characters: an uppercase letter, the character "<" and a second uppercase letter. No letter will be outside the range of the first n letters of the alphabet. Values of n = m = 0 indicate end of input.

Output

For each problem instance, output consists of one line. This line should be one of the following three:

Sorted sequence determined after xxx relations: yyy...y. 
Sorted sequence cannot be determined. 
Inconsistency found after xxx relations.

where xxx is the number of relations processed at the time either a sorted sequence is determined or an inconsistency is found, whichever comes first, and yyy...y is the sorted, ascending sequence.

Sample Input

4 6
A<B
A<C
B<C
C<D
B<D
A<B
3 2
A<B
B<A
26 1
A<Z
0 0

Sample Output

Sorted sequence determined after 4 relations: ABCD.
Inconsistency found after 2 relations.
Sorted sequence cannot be determined.题意:给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列题解:1.先判断是否成环2.判断是否有序3.输出有序结果  注意: 需要遍历整张图才能输出最后的有序结果,前两个结果出现,就直接跳出。
 1 #include <queue>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6
 7 const int N=233;
 8 int n,m;
 9 int in[N];
10 bool E[N][N];
11 queue <int> Q;
12
13 int toposort(){
14     int F=1;
15     while(!Q.empty()) Q.pop();
16     int tmp[27];
17     for(int i=1;i<=n;i++) tmp[i]=in[i];
18     for(int i=1;i<=n;i++){
19         int cnt=0,idx;
20         for(int j=1;j<=n;j++)
21         if(tmp[j]==0) cnt++,idx=j;
22         if(cnt==0) return 0;
23         if(cnt>1) F=-1;
24         tmp[idx]--;
25         Q.push(idx);
26         for(int k=1;k<=n;k++){
27             if(E[idx][k]) tmp[k]--;
28         }
29     }
30     return F;
31 }
32
33 int main(){
34     while(scanf("%d%d",&n,&m)!=EOF){
35         if(!n&&!m) break;
36         memset(in,0,sizeof(in));
37         memset(E,0,sizeof(E));
38         char s[10];
39         int Flag=0;
40         for(int i=1;i<=m;i++){
41             scanf("%s",s);
42             if(Flag) continue;
43             if(!E[s[0]-‘A‘+1][s[2]-‘A‘+1]){
44                 E[s[0]-‘A‘+1][s[2]-‘A‘+1]=1;
45                 in[s[2]-‘A‘+1]++;
46             }
47             int p=toposort();
48             if(p==0){
49                 printf("Inconsistency found after %d relations.\n",i);
50                 Flag=1;
51             }
52             else if(p==1){
53                 printf("Sorted sequence determined after %d relations: ",i);
54                 while(!Q.empty()){
55                     printf("%c",Q.front()+‘A‘-1);
56                     Q.pop();
57                 }
58                 printf(".\n");
59                 Flag=1;
60             }
61         }
62         if(!Flag) printf("Sorted sequence cannot be determined.\n");
63     }
64     return 0;
65 }

原文地址:https://www.cnblogs.com/Leonard-/p/8456048.html

时间: 2024-10-10 14:51:48

POJ 1094 Sorting It All Out(拓扑排序判环)的相关文章

POJ 1094 Sorting It All Out 拓扑排序

Sorting It All Out Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & %llu Description An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to

Legal or Not(拓扑排序判环)

http://acm.hdu.edu.cn/showproblem.php?pid=3342 Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5788    Accepted Submission(s): 2678 Problem Description ACM-DIY is a large QQ group w

LightOJ1003---Drunk(拓扑排序判环)

One of my friends is always drunk. So, sometimes I get a bit confused whether he is drunk or not. So, one day I was talking to him, about his drinks! He began to describe his way of drinking. So, let me share his ideas a bit. I am expressing in my wo

HDU 3342 Legal or Not(拓扑排序判环)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342 题目: Problem Description ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that just like a big family. Every day,many "holy cows" like HH, hh, AC, ZT, lc

拓扑排序判环

拓扑排序的核心就是每次找入度为0的点,进入输出队列 ,然后将与此点相连的节点入度减1重复做以上操作.当做n-1 次后还有点没进输出队列 那么这些点就是环上的 因为环上的各点入度都为1 没有0的 就不能更新.也就是说拓扑排序一遍之后,如果是DAG所有点都恰好入队一次如果有环,那么一定存在没有入队的点. 例题: Legal or NotTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Pr

HDU1811 拓扑排序判环+并查集

HDU Rank of Tetris 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1811 题意:中文问题就不解释题意了. 这道题其实就是一个拓扑排序判圈,我的博客里面其他几篇拓扑排序判圈的套路一样.但是这道题与他们不同的的是在大小关系里面存在一种 "="的关系,这就意味的那些序号不同的点,实际上是一个点.共享入度和出度.我们可以通过并查集将他们合并,合成一个点.这里说一下如何判断信息不完全.我们早先在做拓扑排序,多种排列方式的时候,按照字

[hiho1174]拓扑排序一(拓扑排序判环)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi,你这学期有选什么课么? 小Hi:挺多的,比如XXX1,XXX2还有XXX3.本来想选YYY2的,但是好像没有先选过YYY1,不能选YYY2. 小Ho:先修课程真是个麻烦的东西呢. 小Hi:没错呢.好多课程都有先修课程,每次选课之前都得先查查有没有先修.教务公布的先修课程记录都是好多年前的,不但有重复的信息,好像很多都不正确了. 小Ho:课程

Almost Acyclic Graph CodeForces - 915D (思维+拓扑排序判环)

Almost Acyclic Graph CodeForces - 915D time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given a directed graph consisting of n vertices and m edges (each edge is directed, so it can

HDU 4324 Triangle LOVE(拓扑排序判环)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4324 题目: Problem Description Recently, scientists find that there is love between any of two people. For example, between A and B, if A don’t love B, then B must love A, vice versa. And there is no possi