ashibh

Untitled

Jan 7th, 2024
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.08 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define lli long long int
  4. #define yy cout << "YES" << endl
  5. #define nn cout << "NO" << endl
  6. #define pb push_back
  7. #define ff first
  8. #define ss second
  9. #define pll pair<lli, lli>
  10. #define ll 1ll*
  11.  
  12. void oj() {
  13. #ifndef ONLINE_JUDGE
  14.     freopen("input.txt", "r", stdin);
  15.     freopen("output.txt", "w", stdout);
  16. #endif
  17.  
  18. }
  19.  
  20. long long int inf = 1000000007;
  21. #define all(x) x.begin(), x.end()
  22. const char nl = '\n';
  23. void ipv(vector<lli>&v, lli n) {
  24.     for (lli i = 0; i < n; i++)cin >> v[i];
  25. }
  26. void opv(vector<lli>&v) {
  27.     for (lli i = 0; i < v.size(); i++)cout << v[i] << " ";
  28. }
  29. void ipvm(vector<lli>&v, lli n, map<lli, lli>&mp) {
  30.     for (lli i = 0; i < n; i++)mp[v[i]]++;
  31. }
  32. void opvm(map<lli, lli>mp) {
  33.     for (auto it : mp)cout << it.first << " " << it.second << " ";
  34.     cout << nl;
  35. }
  36. void ips(string s) {
  37.     cin >> s;
  38. }
  39. lli gcd(lli a, lli b)
  40. {
  41.     if (a == 0)
  42.         return b;
  43.     return gcd(b % a, a);
  44. }
  45. lli lcm(lli a, lli b)
  46. {
  47.     return (a / gcd(a, b)) * b;
  48. }
  49. bool ispow2(lli x) {
  50.     return (x & (x - 1)) == 0;
  51. }
  52.  
  53. bool iskthset(lli n, lli k) {
  54.     return ((n >> (k)) & 1) > 0;
  55. }
  56. void setK(lli &n, lli k) {
  57.     lli t = n;
  58.     t = t | (1 << k);
  59.     n = t;
  60. }
  61. void unsetK(lli &n, lli k) {
  62.     lli t = n;
  63.     t = t & ~(1 << k);
  64.     n = t;
  65. }
  66. void toggleKbit(lli &n, lli k) {
  67.     lli t = n;
  68.     t = (t) ^ (1 << (k));
  69.     n = t;
  70.  
  71. }
  72. // n^x
  73. lli binexpo(lli n, lli x) {
  74.     lli res = 1;
  75.     while (x > 0) {
  76.         if (x & 1)
  77.             res = res * n;
  78.         n = n * n;
  79.         x >>= 1;
  80.     }
  81.     return res;
  82. }
  83. // (n^x) % m
  84.  
  85. lli binexpomod(lli n, lli x, long long m) {
  86.     n %= m;
  87.     lli res = 1;
  88.     while (x > 0) {
  89.         if (x & 1)
  90.             res = res * n % m;
  91.         n = n * n % m;
  92.         x >>= 1;
  93.     }
  94.     return res;
  95. }
  96.  
  97.  
  98. bool isPrm(lli n)
  99. {
  100.  
  101.     if (n <= 1)
  102.         return false;
  103.     for (lli i = 2; i <= sqrt(n); i++)
  104.         if (n % i == 0)
  105.             return false;
  106.  
  107.     return true;
  108. }
  109. bool func() {
  110.  
  111. }
  112. lli bs(/*...*/ lli hi, lli lo, lli n) {
  113.     lli ans = -1;
  114.     while (lo <= hi ) {
  115.         lli mid = lo + (hi - lo + 1) / 2;
  116.         bool ss = func();
  117.         if (ss) {
  118.             ans = mid, hi = mid - 1;
  119.         }
  120.  
  121.         else lo = mid + 1;
  122.     }
  123.     return ans;
  124.  
  125.  
  126. }
  127. int numberofset(int n) {
  128.     return
  129.         __builtin_popcount(n);
  130. //if X is an integer
  131.  
  132. }
  133. lli numberofsetll(lli n) {
  134.     return
  135.         __builtin_popcountll(n);
  136. //if X is a long long
  137.  
  138. }
  139.  
  140.  
  141. //
  142. //
  143. //
  144. //
  145. //
  146.  
  147. lli ldfs(lli v, std::vector<std::vector<lli>>&g, std::vector<lli>&vis, std::vector<lli> &Xor, std::vector<lli> &vec) {
  148.     //action for vertex after entering
  149.     vis[v] = 1;
  150.     Xor[v] = vec[v];
  151.  
  152.     for (lli c : g[v]) {
  153. //        cout << v << " -> " << c << nl;
  154. //action for child before exploring
  155.         if (!vis[c]) {
  156.             lli childXor = ldfs(c, g, vis, Xor, vec);
  157.             Xor[v] = (Xor[v] ^ childXor);
  158.         }
  159. ////action for child after exploring
  160.     }
  161.     return Xor[v];
  162. //action for vertex before exiting;
  163.  
  164. }
  165.  
  166. lli c = 0;
  167. lli ldfs2(lli v, std::vector<std::vector<lli>>&g, std::vector<lli>&vis, std::vector<lli> &Xor, std::vector<lli> &vec, lli xr) {
  168.     //action for vertex after entering
  169.     vis[v] = 1;
  170.     lli tp = vec[v];
  171.  
  172.     for (lli c : g[v]) {
  173. //        cout << v << " -> " << c << nl;
  174. //action for child before exploring
  175.         if (!vis[c])
  176.             tp = (tp ^ ldfs2(c, g, vis, Xor, vec, xr));
  177. ////action for child after exploring
  178.     }
  179.  
  180.     if (tp == xr) {
  181.         tp = 0;
  182.         c++;
  183.     }
  184.     return tp;
  185. //action for vertex before exiting;
  186.  
  187. }
  188.  
  189.  
  190. void cf()
  191. {
  192.     lli f = 0, e = 2, o = 0;
  193.     lli n, k;
  194.     cin >> n >> k;
  195.     std::vector<std::vector<lli>> g(n, std::vector<lli>(n));
  196.     std::vector<lli> vis(n, 0);
  197.     std::vector<lli>Xor(n, 0);
  198.     std::vector<lli> vec(n);
  199.     ipv(vec, n);
  200.     lli res = 0;
  201.     for (int i = 0; i < n; ++i)
  202.     {
  203.         res ^= vec[i];
  204.  
  205.     }
  206.     for (int i = 0; i < n - 1; ++i)
  207.     {
  208.         lli u, v;
  209.         cin >> u >> v;
  210.         u--, v--;
  211.         g[u].pb(v);
  212.         g[v].pb(u);
  213.  
  214.     }
  215.     ldfs(0, g, vis, Xor, vec);
  216.     // cout << res << " " << Xor[0] << nl;
  217.     if (Xor[0] == 0) {
  218.         yy;
  219.         return;
  220.     }
  221.  
  222.     else {
  223.         for (int i = 0; i < n; ++i)
  224.         {
  225.             vis[i] = 0;
  226.         }
  227.         c = 0;
  228.         ldfs2(0, g, vis, Xor, vec, Xor[0]);
  229.         // cout << c << nl;
  230.         if (c > 2 && k > 2) {
  231.             yy;
  232.         } else
  233.             nn;
  234.  
  235.  
  236.     }
  237.     //vector<lli>vec(n);
  238.     //ipv(vec,n);
  239.  
  240.  
  241.  
  242. }
  243.  
  244.  
  245. int main()
  246. {
  247.  
  248.     ios_base::sync_with_stdio(0);
  249.     cin.tie(0);
  250.     cout.tie(0);
  251.     oj();
  252.     lli t = 1;
  253.     cin >> t;
  254.     while (t--)
  255.     {
  256.         cf();
  257.     }
  258. }
  259. //-----------------------------------comments----------------------------------------------------------------------------
  260. //lb(x)= ele eq or greater then x (first occ)
  261. //ub(x)= ele greater then x
  262. // A + B = (A xor B) + 2 * (A & B)
  263. // A + B = (A | B) + (A & B)
  264. // X << k) gives X multiplied by (2^k)
  265. // (X >> k) gives X divided by (2^k)
  266.  
  267.  
Add Comment
Please, Sign In to add comment