#include<iostream>#include<vector>#include<queue>usingnamespace std;int r[100010];
vector<int> adj[100010];intmain(){int n, m;
cin >> n >> m;for(int i =1; i <= m; i++){int u, v;
cin >> u >> v;
adj[u].push_back(v);
r[v]++;}
priority_queue<int, vector<int>, greater<int>> tp;for(int i =0; i < n; i++){if(!r[i])
tp.push(i);}while(!tp.empty()){int u = tp.top();
tp.pop();
cout << u <<'';for(int v : adj[u]){
r[v]--;if(!r[v])
tp.push(v);}}return0;}
#include<bits/stdc++.h>usingnamespace std;constint N =30;int n, m, d[N][N], e[N][N], now;intfloyd(){memcpy(e, d,sizeof e);//复制数组
for(int k =0; k < n; k++)for(int i =0; i < n; i++)for(int j =0; j < n; j++){
e[i][j]|= e[i][k]& e[k][j];if(e[i][j]== e[j][i]& e[i][j]&& i != j)return-1;}for(int i =0; i < n; i++)for(int j =0; j < n; j++)if(e[i][j]== e[j][i]&&!e[i][j]&& i != j)return0;return1;}voidpaixv(){memset(d,0,sizeof d);bool flag =1;for(int i =1; i <= m; i++){char s[6];scanf("%s", s);
d[s[0]-'A'][s[2]-'A']=1;if(flag){int now =floyd();if(now ==-1){printf("Inconsistency found after %d relations.\n", i);
flag =0;}elseif(now ==1){printf("Sorted sequence determined after %d relations: ", i);
pair<int,char> ans[N];for(int j =0; j < n; j++){
ans[i].first=0;
ans[j].second='A'+ j;}for(int j =0; j < n; j++)for(int k =0; k < n; k++)if(e[j][k])++ans[k].first;sort(ans, ans + n);for(int j =0; j < n; j++)printf("%c", ans[j].second);printf(".\n");
flag =0;}}}if(flag)printf("Sorted sequence cannot be determined.\n");}intmain(){while(cin >> n >> m && n)paixv();return0;}
共 27 条回复
696
6
6