poj 1094 Sorting It All Out(拓扑排序·环·矩阵)

网友投稿 784 2022-08-27

poj 1094 Sorting It All Out(拓扑排序·环·矩阵)

poj 1094 Sorting It All Out(拓扑排序·环·矩阵)

题目:​​It All Out

Time Limit: 1000MS

 

Memory Limit: 10000K

Total Submissions: 30357

 

Accepted: 10518

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

Sample Output

Sorted sequence determined after 4 relations: ABCD. Inconsistency found after 2 relations. Sorted sequence cannot be determined.

分析:很经典的拓扑排序。矛盾关系的产生(Inconsistency found after xxx relations. )是因为在有向图中产生了环;大小关系的确定(Sorted sequence determined after xxx relations: yyy...y. )是整个有向图的拓扑排序已经完成;无法确定整个序列的单调关系(Sorted sequence cannot be determined. )则是m条有向边建立完了后仍然没有前两者的判断结果。完成它确实不容易,TLE了4次,WA了4次,前者是因为没有搞懂"after xxx relations."这句话的内涵,需要每次建立新边后立即判断一下有没有环,完没完成拓扑排序,如果判断了则输出结果,后面只需要输入剩下的关系就可以了,如果m条有向边建立完成了都没有前两个的判断结果,那么就是无法确定结果。WA的原因我是真没看出来,后来换了一种写法(模仿||-_-)才过的。

为逝去的代码默哀三分钟:WA

#include #include #include using namespace std;int head[30],indeg[30],n,m,sum;struct node{ int to,next;}edge[30];bool vis[30];void init(){ sum=0; memset(vis,0,sizeof(vis)); memset(indeg,0,sizeof(indeg)); memset(head,-1,sizeof(head)); memset(edge,0,sizeof(edge));}void addedge(int u,int v){ vis[u]=vis[v]=1; edge[sum].to=v; edge[sum].next=head[u]; head[u]=sum++; indeg[v]++;}int report(){ int res=0; for(int i=0;i-1;j=edge[j].next){ ing[edge[j].to]--; if(ing[edge[j].to]==0&&vis[j]){ que[top++]=edge[j].to; ing[edge[j].to]--; } } } if(top==n) return 3; if(top>n>>m&&(n+m)){ init(); flag=0; for(int i=0;i

接下来是正确的:

#include #include #include using namespace std;int n,m,sum;int map[30][30],indeg[30],que[30],top;int topo(){ // 1:OK 2: 有环,矛盾 3:not sure int ing[30],loc,flag=1; top=0; for(int i=0;i1) flag=3; que[top++]=loc; ing[loc]--; for(int j=0;j>n>>m&&(n+m)){ memset(map,0,sizeof(map)); memset(indeg,0,sizeof(indeg)); bool tag=0; for(int i=0;i

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:13 种编程语言名称的来历
下一篇:poj 2446 Chessboard(经典二分匹配)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~