Paste Search Dynamic
dsu
  1. /**
  2.  *    author:  tourist
  3.  *    created: 24.07.2020 17:34:32      
  4. **/
  5. #include <bits/stdc++.h>
  6.  
  7. using namespace std;
  8.  
  9. class dsu {
  10.  public:
  11.   vector<int> p;
  12.   int n;
  13.  
  14.   dsu(int _n) : n(_n) {
  15.     p.resize(n);
  16.     iota(p.begin(), p.end(), 0);
  17.   }
  18.  
  19.   inline int get(int x) {
  20.     return (x == p[x] ? x : (p[x] = get(p[x])));
  21.   }
  22.  
  23.   inline bool unite(int x, int y) {
  24.     x = get(x);
  25.     y = get(y);
  26.     if (x != y) {
  27.       p[x] = y;
  28.       return true;
  29.     }
  30.     return false;
  31.   }
  32. };
  33.  
  34. int main() {
  35.   ios::sync_with_stdio(false);
  36.   cin.tie(0);
  37.   int tt;
  38.   cin >> tt;
  39.   while (tt--) {
  40.     int n;
  41.     cin >> n;
  42.     string a, b;
  43.     cin >> a >> b;
  44.     dsu d(26);
  45.     int ans = 0;
  46.     for (int i = 0; i < n; i++) {
  47.       if (a[i] > b[i]) {
  48.         ans = -1;
  49.         break;
  50.       }
  51.       if (d.unite((int) (a[i] - 'a'), (int) (b[i] - 'a'))) {
  52.         ++ans;
  53.       }
  54.     }
  55.     cout << ans << 'n';
  56.   }
  57.   return 0;
  58. }
Parsed in 0.007 seconds