Advertisement
Guest User

Untitled

a guest
Apr 21st, 2018
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long
  5. set <int> st;
  6. vector <int> v[30];
  7. vector < pair <int, int> > topsort;
  8. vector <char> ans;
  9. string s[109];
  10. int visit[30], visit2[30];
  11.  
  12. void dfs(int val, int cnt)
  13.  
  14. {
  15.     for(int i = 0; i < v[val].size(); i++) {
  16.         dfs(v[val][i], cnt + 1);
  17.     }
  18.  
  19.     //visit[val] = max(visit[val], cnt);
  20.     topsort.push_back(make_pair(cnt, val));
  21. }
  22.  
  23. void dfs2(int val) {
  24.  
  25.     int cnt = 0;
  26.     for(int i = 0; i < v[val].size(); i++) {
  27.         dfs2(v[val][i]);
  28.     }
  29.  
  30.     st.insert(val);
  31. }
  32.  
  33. int main()
  34.  
  35. {
  36.     ll t;
  37.     cin >> t;
  38.     while(t--) {
  39.         //memset(visit, 0, sizeof(visit));
  40.         memset(visit2, 0, sizeof(visit2));
  41.         ll n;
  42.         scanf("%lld", &n);
  43.         for(int i = 0; i < n; i++)
  44.             cin >> s[i];
  45.  
  46.         for(int i = 0; i < n - 1; i++) {
  47.  
  48.             ll len = min(s[i].length(), s[i + 1].length());
  49.             for(int j = 0; j < len; j++) {
  50.                 if(s[i][j] == s[i + 1][j])
  51.                     continue;
  52.                 else {
  53.  
  54.                     v[ s[i][j] - 'a' ].push_back(s[i + 1][j] - 'a');
  55.                     break;
  56.                 }
  57.             }
  58.         }
  59.  
  60.         int cnt = 0, start;
  61.         for(int i = 0; i <= 26; i++) {
  62.             if(v[i].size() == 0)
  63.                 continue;
  64.             dfs2(i);
  65.             int tmp = st.size();
  66.             if(cnt < tmp ) {
  67.                 cnt = tmp;
  68.                 start = i;
  69.             }
  70.             st.clear();
  71.         }
  72.        
  73.         dfs(start, 1);
  74.         sort(topsort.begin(), topsort.end());
  75.         for(int i = topsort.size() - 1; i >= 0; i--) {
  76.             if( visit2[topsort[i].second])
  77.                 continue;
  78.  
  79.             visit2[topsort[i].second] = 1;
  80.             ans.push_back(topsort[i].second + 'a');
  81.         }
  82.  
  83.         for(int i = ans.size() - 1; i >= 0; i--) {
  84.             printf("%c", ans[i]);
  85.             if(i != 0)
  86.                 printf(" ");
  87.             else
  88.                 printf("\n");
  89.         }
  90.  
  91.         for(int i = 0; i <= 28; i++) {
  92.             v[i].clear();
  93.         }
  94.  
  95.         topsort.clear();
  96.         ans.clear();
  97.     }
  98.  
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement