Advertisement
pb_jiang

CF2109D

May 19th, 2025
481
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.25 KB | None | 0 0
  1. // Problem: D. D/D/D
  2. // Contest: Codeforces - Codeforces Round 1025 (Div. 2)
  3. // URL: https://codeforces.com/contest/2109/problem/D
  4. // Memory Limit: 512 MB
  5. // Time Limit: 2000 ms
  6. //
  7. // Powered by CP Editor (https://cpeditor.org)
  8.  
  9. #include <assert.h>
  10. #include <bits/stdc++.h>
  11. using namespace std;
  12. #ifndef __DEBUG__
  13. #define dbg(...) 42
  14. #endif
  15. template <class T> using mpq = priority_queue<T, vector<T>, greater<T>>;
  16.  
  17. namespace rngs = std::ranges;
  18. using ll = long long;
  19. using a2l = array<ll, 2>;
  20. using pll = pair<ll, ll>;
  21. using vl = vector<ll>;
  22.  
  23. void solve(ll t)
  24. {
  25.     stringstream ts;
  26.     ll n, m, l;
  27.     cin >> n >> m >> l;
  28.     ts << n << ',' << m << ',' << l;
  29.     vl as(l);
  30.     vl odds, evens;
  31.     for (auto &x : as) {
  32.         cin >> x;
  33.         ts << '/' << x;
  34.         (x % 2 ? odds : evens).push_back(x);
  35.     }
  36.     rngs::sort(odds), rngs::sort(evens);
  37.     ts << ':';
  38.     vector<vl> g(n + 1);
  39.     vector<vl> dist(2, vl(n + 1, LLONG_MAX / 2));
  40.     for (ll i = 0, u, v; i < m; ++i) {
  41.         cin >> u >> v;
  42.         ts << '<' << u << ',' << v << '>';
  43.         g[u].push_back(v), g[v].push_back(u);
  44.     }
  45.     /*
  46.     if (t == 73) {
  47.         cout << ts.str() << '\n';
  48.         return;
  49.     }
  50.     */
  51.     dist[0][1] = 0;
  52.     queue<a2l> q;
  53.     q.push({1, 0});
  54.     while (!q.empty()) {
  55.         auto [u, step] = q.front();
  56.         q.pop();
  57.         for (auto v : g[u]) {
  58.             if (dist[1 - step][v] > dist[step][u] + 1) {
  59.                 dist[1 - step][v] = dist[step][u] + 1;
  60.                 q.push({v, 1 - step});
  61.             }
  62.         }
  63.     }
  64.  
  65.     ll ec = std::accumulate(evens.begin(), evens.end(), 0ll);
  66.     ll oc = std::accumulate(odds.begin(), odds.end(), 0ll);
  67.     ll even_avail = ec + (oc % 2 == 0 ? oc : oc - odds[0]);
  68.     ll odd_avail = LLONG_MIN / 2;
  69.     if (oc != 0)
  70.         odd_avail = (oc % 2 == 0 ? oc - odds[0] : oc) + ec;
  71.  
  72.     dbg(dist);
  73.     string s(n, ' ');
  74.     for (ll i = 1; i <= n; ++i) {
  75.         s[i - 1] = ll(dist[0][i] <= even_avail || dist[1][i] <= odd_avail) + '0';
  76.     }
  77.     cout << s << '\n';
  78. }
  79.  
  80. int main(int argc, char **argv)
  81. {
  82.     std::ios::sync_with_stdio(false);
  83.     std::cin.tie(nullptr);
  84.  
  85.     ll t;
  86.     cin >> t;
  87.     ll ot = t;
  88.     while (t--)
  89.         solve(ot - t);
  90.  
  91.     return 0;
  92. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement