Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 41;
  5.  
  6. int n, p;
  7. pair<int, int> match[N];
  8. int cur[N], match_state[N];
  9. int want[N];
  10.  
  11. bool dfs(int at) {
  12.   if (at == p) {
  13.     for (int i = 0; i < n; ++i)
  14.       cur[i] = 0;
  15.     for (int i = 0; i < p; ++i) {
  16.       int u = match[i].first;
  17.       int v = match[i].second;
  18.       if (match_state[i] == 0)
  19.         cur[u] += 3;
  20.       else if (match_state[i] == 1)
  21.         ++cur[u], ++cur[v];
  22.       else
  23.         cur[v] += 3;
  24.     }
  25.     bool ok = true;
  26.     for (int i = 0; i < n; ++i)
  27.       ok &= (cur[i] == want[i]);
  28.     return ok;
  29.   }
  30.   bool ok = false;
  31.   for (int i = 0; i < 3; ++i) {
  32.     match_state[at] = i;
  33.     ok |= dfs(at + 1);
  34.   }
  35.   return ok;
  36. }
  37.  
  38. void solve() {
  39.   scanf("%d", &n);
  40.   for (int i = 0; i < n; ++i)
  41.     scanf("%d", &want[i]);
  42.   p = 0;
  43.   for (int i = 0; i < n; ++i)
  44.     for (int j = i + 1; j < n; ++j)
  45.       match[p] = {i, j}, ++p;
  46.   puts(dfs(0) ? "YES" : "NO");
  47. }
  48.  
  49. int main() {
  50.   int qq;
  51.   scanf("%d", &qq);
  52.   while (qq--)
  53.     solve();
  54.   return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement