蒟蒻几乎没学图论,代码感觉像答辩,居然过了,问有没有HACK(没有紫衫,不是想发题解)
#include<bits/stdc++.h>
using namespace std;
int n;
int Cnt[30];
string ans;
class one
{
public:
int num;
int out[26];
} N[26];
inline int Int(char ch)
{
return ch - 'A';
}
inline char Char(int x)
{
return x + 'A';
}
void start()
{
for (int i = 0; i < 26; i++)
N[i].num = 0;
}//构造函数忘了
void Printf(int x, int op)
{
if (op == 1)
printf("Sorted sequence determined after %d relations: ", x);
if (op == 2)
printf("Inconsistency found after %d relations.", x);
if (op == 3)
printf("Sorted sequence cannot be determined.");
}
void d(int s, int &cnt, int M, int &f2);
int main()
{
int m;
start();
scanf("%d%d", &n, &m);
char a, b;
for (int M = 1; M <= m; M++)
{
f1:
if (M > m)
break;
cin >> a >> b >> b;
if (a == b)
{
Printf(M, 2);
return 0;
}
for (int i = 0; i < N[Int(a)].num; i++)
if (N[Int(a)].out[i] == Int(b))
{
M++;
goto f1;
}
N[Int(a)].out[N[Int(a)].num] = Int(b);
N[Int(a)].num++;
for (int i = 0; i < n; i++)
{
int cnt = 0;
int f2 = 0;
d(i, cnt, M, f2);
if (f2 == 2)
{
Printf(M, 2);
return 0;
}
if (f2 == 1)
{
Printf(M, 1);
cout << ans << "." << endl;
return 0;
}
}
}
Printf(0, 3);
return 0;
}
void d(int s, int &cnt, int M, int &f2)
{
for (int i = 0; i < cnt; i++)
if (s == Cnt[i])
{
f2 = 2;
return;
}
Cnt[cnt] = s;
cnt++;
if (cnt == n)
{
for (int i = 0; i < cnt; i++)
ans += Char(Cnt[i]);
if (f2 != 2)
f2 = 1;
}
for (int i = 0; i < N[s].num; i++)
d(N[s].out[i], cnt, M, f2);
cnt--;
}