POJ1094Sorting It All Out
Sorting It All Out
| Time Limit:1000 MS |
|
Memory Limit:10000 K |
| Total Submissions:29359 |
|
Accepted:10170 |
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 shocould 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 6A
Sample Output
Sorted sequence determined after 4 relations: ABCD.Inconsistency found after 2 relations.Sorted sequence cannot be determined.
# Include
# Include
# Include
# Include
# Include
# Include
# Include
# Define N 1009 using namespace std; char s [N]; int mp [27] [27]; int q [N]; int deg [N]; int topo (int n) {int c = 0, temp [27], m, loc, flag = 1; for (int I = 1; I <= n; I ++) temp [I] = deg [I]; for (int I = 1; I <= n; I ++) {m = 0; for (int j = 1; j <= n; j ++) if (temp [j] = 0) {m ++; loc = j ;} if (m = 0) return 0; // if (m> 1) flag =-1; // No Ring q [c ++] = loc; temp [loc] =-1; for (int j = 1; j <= n; j ++) if (mp [loc] [j] = 1) temp [j] --;} return flag;} int main () {int n, M; while (~ Scanf ("% d", & m, & n) {if (n = 0 & m = 0) break; memset (mp, 0, sizeof mp); memset (deg, 0, sizeof deg); int flag = 0; for (int I = 1; I <= n; I ++) {scanf ("% s", s); if (flag) continue; int a = s [0]-'A' + 1; int B = s [2]-'A' + 1; mp [A] [B] = 1; deg [B] ++; int ans = topo (m ); if (ans = 0) {cout <"Inconsistency found after" <