Advertisement
pb_jiang

ABC299E WA

May 8th, 2023
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. #include <assert.h>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. template <class T> using mpq = priority_queue<T, vector<T>, greater<T>>;
  6.  
  7. using ll = long long;
  8. using pii = pair<int, int>;
  9. using pll = pair<ll, ll>;
  10. using vl = vector<ll>;
  11. using vi = vector<int>;
  12.  
  13. int main(int argc, char **argv)
  14. {
  15.     int n, m;
  16.     cin >> n >> m;
  17.     vi g[1 << 11];
  18.     for (int i = 0; i < m; ++i) {
  19.         int u, v;
  20.         cin >> u >> v;
  21.         g[u].push_back(v), g[v].push_back(u);
  22.     }
  23.  
  24.     vector<vi> dist(1 << 11, vi(1 << 11, INT_MAX / 2));
  25.     for (int i = 1; i <= n; ++i) {
  26.         vector<int> vis(1 << 11);
  27.         queue<pii> q;
  28.         q.push({i, 0});
  29.         while (q.empty() == false) {
  30.             auto [u, d] = q.front();
  31.             q.pop();
  32.             vis[u] = 1;
  33.             dist[i][u] = d;
  34.  
  35.             for (auto v : g[u])
  36.                 if (vis[v] == 0)
  37.                     q.push({v, d + 1});
  38.         }
  39.     }
  40.  
  41.     int k;
  42.     set<int> wlist;
  43.     vi blist[1 << 11];
  44.     cin >> k;
  45.     vi p(k), d(k);
  46.     for (int i = 0; i < k; ++i) {
  47.         cin >> p[i] >> d[i];
  48.         int u = p[i], di = d[i];
  49.         for (int v = 1; v <= n; ++v) {
  50.             if (dist[u][v] < di) {
  51.                 wlist.insert(v);
  52.             } else if (dist[u][v] == di) {
  53.                 blist[u].push_back(v);
  54.             }
  55.         }
  56.     }
  57.  
  58.     string ans = string(n, '1');
  59.     for (auto x : wlist)
  60.         ans[x - 1] = '0';
  61.  
  62.     bool succ = true;
  63.     for (int i = 0; i < k && succ; ++i) {
  64.         int u = p[i];
  65.         bool hit = false;
  66.  
  67.         for (auto v : blist[u])
  68.             if (ans[v - 1] == '1')
  69.                 hit = true;
  70.  
  71.         succ = succ && hit;
  72.     }
  73.  
  74.     if (succ)
  75.         cout << "Yes\n" << ans << '\n';
  76.     else
  77.         cout << "No\n";
  78.  
  79.     return 0;
  80. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement