Submission #1068620

#TimeUsernameProblemLanguageResultExecution timeMemory
1068620duckindogInside information (BOI21_servers)C++17
2.50 / 100
1411 ms2760 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = 10'000 + 10;
int n, k;
vector<pair<int, int>> ad[N];
vector<tuple<int, int, int>> Q;
int f[N];

int32_t main() { 
  cin.tie(0)->sync_with_stdio(0);

  cin >> n >> k;
  for (int i = 1; i < n + k; ++i) { 
    char type; cin >> type;
    if (type == 'S') { 
      int a, b; cin >> a >> b;
      ad[a].push_back({b, i});
      ad[b].push_back({a, i});
    }

    if (type == 'Q') { 
      int a, d; cin >> a >> d;
      Q.emplace_back(a, d, i);
    }

    if (type == 'C') { 
      int d; cin >> d;
      Q.emplace_back(0, d, i);
    }
  }

  auto bfs = [&](int st, int ed, int time) { 
    memset(f, 0, sizeof f);
    queue<int> q({st});
    while (q.size()) { 
      auto u = q.front(); q.pop();
      if (u == ed) return true;
      for (const auto& [v, w] : ad[u]) { 
        if (w > time) continue;
        if (f[u] < w) { 
          f[v] = w;
          q.push(v);
        }
      }
    }
    return false;
  };

  for (const auto& [a, d, i] : Q) { 
    if (!a) continue;
    cout << (bfs(d, a, i) ? "yes" : "no") << "\n";
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...