Sorting It All Out
| Time Limit: 1000MS |
|
Memory Limit: 10000K |
| Total Submissions: 29182 |
|
Accepted: 10109 |
Description
An ascending sorted sequence of distinct values are one in which some form of a less-than operator are used to order the Ele ments from smallest to largest. For example, the sorted sequence A, B, C, D implies, a < B, b < C and C < D. In this problem, we'll give yo U a set of relations of the form a < B and ask you to determine whether a sorted order have been specified or not.
Input
Input consists of multiple problem instances. Each instance starts with a line containing-positive integers n and m. The first value indicated the number of objects To sort, where 2 <= n <= 26. The objects to be sorted'll be the first n characters of the uppercase alphabet. The second value m indicates the number of relations of the form A < B which'll be given in this problem instance. Next'll be M lines, each containing one such relation consisting of three Characters:an uppercase letter, the character "<" and a second uppercase letter. No letter would 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, the output consists of one line. This line should is 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 are determined or an inconsistency is F Ound, whichever comes first, and yyy...y is the sorted, ascending sequence.
Sample Input
4 6a<ba<cb<cc<db<da<b3 2a<bb<a26 1a<z0 0
Sample Output
Sorted sequence determined after 4 RELATIONS:ABCD. Inconsistency found after 2 relations. Sorted sequence cannot be determined.
Source
East Central North America 2001
#include <stdio.h>const int N = 30;int mapt[n][n],in[n],n,m;int tope (int tm) {int path[n],k=0,l=0,uncertain=0; for (int i=0;i<n;i++) if (in[i]==0) path[k++]=i,in[i]=-1; while (l<k) {int s=path[l++]; if (k-l!=0) uncertain=1; for (int j=0;j<n;j++) if (In[j]>0&&mapt[s][j]) {in[j]--; if (in[j]==0) path[k++]=j,in[j]=-1; }} int flag=0; if (k!=n)//description has ring, contradiction printf ("inconsistency found after%d relations.\n", TM), flag=1; else if (uncertain==0) {printf ("Sorted sequence determined after%d relations:", TM); for (int i=0;i<k;i++) printf ("%c", path[i]+ ' A '); printf (". \ n"); flag=1; } else if (tm==m)//Last added a relational judgment, possible output printf ("Sorted sequence cannot be determined.\n"), flag=1; return flag;} int main () {int in_t[n]; Char st[10]; while (scanf ("%d%d", &n,&m) >0&&n+m!=0) { for (int i=0;i<n;i++) {in_t[i]=0; for (int j=0;j<n;j++) mapt[i][j]=0; } int flag=0; for (int i=1;i<=m;i++) {scanf ("%s", ST); if (flag) continue; int a=st[0]-' a '; int b=st[2]-' A '; if (mapt[a][b]==0) {mapt[a][b]=1; in_t[b]++; for (int j=0;j<n;j++) IN[J]=IN_T[J]; Flag=tope (i); } } }}
POJ1094 sorting It All out (topological sort) each input bar relationship is judged once