saturnbored

TLE solution

Oct 12th, 2022
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.86 KB | None | 0 0
  1. class Solution {
  2.    
  3.     void make_graph(vector<vector<int>> &graph, int v, vector<bool> &vis){
  4.         vis[v] = 1;
  5.         for(int i = 0; i < 21; ++i){
  6.             if((v >> i) & 1){
  7.                 int child = v ^ (1 << i);
  8.                 graph[v].push_back(child);
  9.                 if(vis[child] == 0){
  10.                     make_graph(graph, child, vis);
  11.                 }
  12.             }
  13.         }
  14.     }
  15.    
  16.     void dfs(vector<vector<int>> &graph, vector<int> &pos, int val, int v){
  17.         if(pos[v] <= val)
  18.             return;
  19.         pos[v] = val;
  20.         for(int &child: graph[v]){
  21.             if(pos[child] <= val)
  22.                 continue;
  23.             dfs(graph, pos, val, child);
  24.         }
  25.     }
  26.    
  27.   public:
  28.     vector<int> solve(int n, vector<string> &s, int Q, vector<string> &q){
  29.         vector<int> ans;
  30.         for(int i = 0; i < n; ++i){
  31.             sort(s[i].begin(), s[i].end());
  32.             auto it = unique(s[i].begin(), s[i].end());
  33.             s[i].resize(it - s[i].begin());
  34.         }
  35.         for(int i = 0; i < Q; ++i){
  36.             sort(q[i].begin(), q[i].end());
  37.         }
  38.         int N = (1 << 22) - 1;
  39.         vector<vector<int>> graph(N + 1);
  40.         vector<bool> vis(N + 1, 0);
  41.         make_graph(graph, N, vis);
  42.         vector<int> pos(N + 1, n + 1);
  43.         for(int i = 0; i < n; ++i){
  44.             int num = 0;
  45.             for(int j = 0; j < s[i].size(); ++j){
  46.                 num += (1 << (s[i][j] - 'a'));
  47.             }
  48.             dfs(graph, pos, i, num);
  49.         }
  50.         for(int i = 0; i < Q; ++i){
  51.             int num = 0;
  52.             for(int j = 0; j < q[i].size(); ++j){
  53.                 num += (1 << (q[i][j] - 'a'));
  54.             }
  55.             if(pos[num] == n + 1)
  56.                 ans.push_back(-1);
  57.             else
  58.                 ans.push_back(pos[num]);
  59.         }
  60.         return ans;
  61.     }
  62. };
Advertisement
Add Comment
Please, Sign In to add comment