样例都过了,hack过了,但只有20分!
#include<bits/stdc++.h>
using namespace std;
const int N=30;
int n,m;
int x,y;
int in_deg[N];
int out_deg[N];
int indeg[N],outdeg[N];
char a,b;
string ans;
vector<int>G[N];
int topsort(){
int cnt=0;ans="";
queue<int>q;
for(int i=1;i<=n;i++)
if(!in_deg[i]&&out_deg[i])
q.push(i),ans=char('A'+y-1)+ans;
if(q.empty())return 0;
if(q.size()>1)return 3;
while(!q.empty()){
int x=q.front();q.pop();
cnt++;
bool flag=0;
for(auto y:G[x]){
if(!(--in_deg[y])){
if(flag)return 0;
ans=char('A'+y-1)+ans;
q.push(y),flag=1;
}
}
}
if(cnt==n)return 1;
else return 2;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>a>>b>>b;
x=a-'A'+1,y=b-'A'+1;
G[y].push_back(x);
in_deg[x]++,out_deg[y]++;
indeg[x]++,outdeg[y]++;
int ret=topsort();
if(!ret){
printf("Inconsistency found after %d relations.\n",i);
return 0;
}else if(ret==1){
printf("Sorted sequence determined after %d relations: ",i);
cout<<ans<<".";
return 0;
}
for(int j=1;j<=n;j++){
in_deg[j]=indeg[j];
out_deg[j]=outdeg[j];
}
}
puts("Sorted sequence cannot be determined.");
return 0;
}