Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstring>
- #include <string>
- #include <map>
- #include <stack>
- #include <vector>
- #include <algorithm>
- #define MAX 30
- #define mapii map <int, int>
- #define mp make_pair
- #define pb push_back
- using namespace std;
- mapii g[MAX];
- vector <string> ans;
- int nin[MAX], len;
- bool vis[MAX], use[MAX];
- void build()
- {
- int i;
- char l1,l2,l3,l4;
- for ( i = 0; i < MAX; i++) {
- g[i].clear();
- }
- memset(nin, 0, sizeof(nin));
- scanf("%c%c%c%c", &l1, &l2, &l3, &l4);
- while(l4 != '\n')
- {
- g[l1-'A'].insert(mp(l3-'A', 0));
- nin[l3-'A']++;
- scanf("%c%c%c%c", &l1, &l2, &l3, &l4);
- }
- g[l1-'A'].insert(mp(l3-'A', 0));
- nin[l3-'A']++;
- }
- void topoSort(string s)
- {
- int i;
- mapii::iterator mit;
- for ( i = 0; i < 27; i++) {
- if(use[i] && nin[i] == 0 && !vis[i])
- {
- vis[i] = 1;
- s.pb((char)i+'A');
- for ( mit = g[i].begin(); mit != g[i].end(); mit++) {
- nin[mit->first]--;
- }
- topoSort(s);
- vis[i] = 0;
- s.pop_back();
- for ( mit = g[i].begin(); mit != g[i].end(); mit++) {
- nin[mit->first]++;
- }
- }
- }
- if(s.size()-1 == len)
- ans.pb(s);
- }
- int main() {
- int i, j, sz, T;
- char l1,l2;
- string s;
- mapii::iterator mit;
- scanf("%d ", &T);
- while (T--) {
- memset(use, 0, sizeof(use));
- len = 0;
- scanf("%c%c", &l1, &l2);
- while(l2 != '\n')
- {
- use[l1-'A'] = 1;
- scanf("%c%c", &l1, &l2);
- len++;
- }
- use[l1-'A'] = 1;
- build();
- /*for ( i = 0; i < 27; i++) {
- printf("%c[%d]: ", i+'A', nin[i]);
- for ( mit = g[i].begin(); mit != g[i].end(); mit++) {
- printf("%c ", mit->first+'A');
- }
- printf("\n");
- }*/
- memset(vis, 0, sizeof(vis));
- s.clear();
- ans.clear();
- topoSort(s);
- sort(ans.begin(),ans.end());
- if(!ans.empty())
- {
- for ( i = 0; i < (int)ans.size(); i++) {
- s = ans[i];
- sz = s.size();
- for ( j = 0; j < sz; j++) {
- if(j != sz-1)
- printf("%c ", s[j]);
- else
- printf("%c\n", s[j]);
- }
- }
- }
- else
- printf("NO\n");
- if(T>=1)
- printf("\n");
- scanf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement