Advertisement
pb_jiang

lc2440 WA

Oct 15th, 2022
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. class Solution
  2. {
  3.     using ll = long long;
  4.     vector<int> g[20003];
  5.     vector<int> ns;
  6.     pair<int, int> dfs(int now, int fa, int v)
  7.     {
  8.         // pair<int, int> means it works or not and the accumulate value from last one mismatch
  9.         int s = ns[now];
  10.         for (auto n : g[now]) {
  11.             if (n == fa)
  12.                 continue;
  13.             auto ret = dfs(n, now, v);
  14.             if (ret.first == -1)
  15.                 return {-1, 0};
  16.             s += ret.second;
  17.             if (s > v)
  18.                 return {-1, 0};
  19.         }
  20.         if (s == v)
  21.             return {0, 0};
  22.         return {0, s};
  23.     }
  24.     bool check(int v)
  25.     {
  26.         auto ret = dfs(0, -1, v);
  27.         if (ret.first == 0)
  28.             return true;
  29.         return false;
  30.     }
  31.  
  32.   public:
  33.     int componentValue(vector<int> &nums, vector<vector<int>> &edges)
  34.     {
  35.         int maxv = 0;
  36.         ll tot = 0;
  37.         ns = nums;
  38.         for (auto n : nums)
  39.             maxv = max(maxv, n), tot += n;
  40.  
  41.         for (const auto &e : edges) {
  42.             auto u = e[0], v = e[1];
  43.             g[u].push_back(v), g[v].push_back(u);
  44.         }
  45.  
  46.         for (int i = maxv; 1ll * i * i <= tot; ++i) {
  47.             if (tot % i == 0 && check(i)) {
  48.                 return tot / i - 1;
  49.             }
  50.         }
  51.         return 0;
  52.     }
  53. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement