题意:给你好多不等式,问是否能按大小排成一列。
思路:一开始想是拓扑排序问题,嗯,的确就是拓扑排序问题,不过想想好麻烦的样子,于是就SPFA来吧。
大概是以下步骤:
1、输入不等式。
2、看是否已经找到排序或者出错,如果没有继续下面步骤,否则继续输入不处理。
3、对于每次输入建边,如A<B,就建一条0到1的有向边。
4、每次对于未被访问的点作为起点SPFA,发现有环则说明出错,得到答案,记录是第几个输入;否则看所有找到的最长路是否等于n-1,如果等于,则说明可以排序成一列,记录路径。
吐槽:WA了好久,发现这种情况如
3 3
A<B
B<C
C<A
答案是
Sorted sequence determined after 2 relations: ABC.
而不是
Inconsistency found after 3 relations.
郁闷啊。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int m,n,fst[30],next[1000],node[1000],in[