Submission #965344

#TimeUsernameProblemLanguageResultExecution timeMemory
965344Alkaser_IDJail (JOI22_jail)C++17
0 / 100
1256 ms1048576 KiB
#include <iostream> #include <algorithm> #include <vector> #include <set> #include <map> using namespace std; typedef long long ll; const ll N = 2e5 + 5; vector<ll> adj[N], path[N]; ll a[N], b[N], dep[N], p[N][20]; ll ind[N], curr[N]; bool vis[N], com[N]; inline void dfs1(ll i, ll pr) { p[i][0] = pr; dep[i] = dep[pr] + 1; for (ll j = 1; j < 20; ++j) { p[i][j] = p[p[i][j - 1]][j - 1]; } for (ll j = 0; j < adj[i].size(); ++j) { if (adj[i][j] == pr) continue; dfs1(adj[i][j], i); } } inline ll parent(ll x, ll d) { if (d == 0) return x; for (ll j = 0; j < 20; ++j) { if ((1ll << j) & d) return parent(p[x][j], d - (1ll << j)); } } inline ll lca(ll x, ll y) { if (dep[x] > dep[y]) swap(x, y); y = parent(y, dep[y] - dep[x]); if (x == y) return x; for (ll j = 19; j >= 0; --j) { if (p[x][j] != p[y][j]) { x = p[x][j]; y = p[y][j]; } } return p[x][0]; } inline void pth(ll i) { ll ca = lca(a[i], b[i]); if (ca == a[i]) { ll cr = b[i]; for (;;) { path[i].push_back(cr); cr = p[cr][0]; if (cr == ca) break; } reverse(path[i].begin(), path[i].end()); } else if (ca == b[i]) { ll cr = a[i]; for (;;) { cr = p[cr][0]; path[i].push_back(cr); if (cr == ca) break; } } else { ll cr = a[i]; for (;;) { cr = p[cr][0]; path[i].push_back(cr); if (cr == ca) break; } vector<ll> as; cr = b[i]; for (;;) { as.push_back(cr); cr = p[cr][0]; if (cr == ca) break; } reverse(as.begin(), as.end()); for (ll j = 0; j < as.size(); ++j) path[i].push_back(as[j]); } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin >> t; for (; t--;) { ll n; cin >> n; for (ll i = 1; i <= n; ++i) { adj[i].clear(); path[i].clear(); vis[i] = false; com[i] = false; } for (ll i = 1; i < n; ++i) { ll u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } dfs1(1, 0); ll q; cin >> q; for (ll i = 1; i <= q; ++i) { cin >> a[i] >> b[i]; pth(i); vis[a[i]] = true; curr[i] = a[i]; ind[i] = 0; } bool ans = true; for (ll completed = 0; completed < q;) { bool fl = true; for (ll i = 1; i <= q; ++i) { if (com[i]) continue; for (;;) { ll dx = ind[i]; if (vis[path[i][dx]]) break; vis[curr[i]] = false; curr[i] = path[i][dx]; fl = false; vis[curr[i]] = true; ++ind[i]; if (ind[i] == path[i].size()) { com[i] = true; ++completed; break; } } } if (fl) { ans = false; break; } } if (ans) cout << "Yes\n"; else cout << "No\n"; } }

Compilation message (stderr)

jail.cpp: In function 'void dfs1(ll, ll)':
jail.cpp:20:19: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   20 |  for (ll j = 0; j < adj[i].size(); ++j) {
      |                 ~~^~~~~~~~~~~~~~~
jail.cpp: In function 'void pth(ll)':
jail.cpp:77:20: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |   for (ll j = 0; j < as.size(); ++j) path[i].push_back(as[j]);
      |                  ~~^~~~~~~~~~~
jail.cpp: In function 'int main()':
jail.cpp:116:17: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  116 |      if (ind[i] == path[i].size()) { com[i] = true; ++completed; break; }
      |          ~~~~~~~^~~~~~~~~~~~~~~~~
jail.cpp: In function 'll parent(ll, ll)':
jail.cpp:30:1: warning: control reaches end of non-void function [-Wreturn-type]
   30 | }
      | ^
#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...