Submission #824239

#TimeUsernameProblemLanguageResultExecution timeMemory
824239LiudasRadio Towers (IOI22_towers)C++17
0 / 100
4103 ms1052200 KiB
#include "towers.h" #include <cassert> #include <cstdio> #include <bits/stdc++.h> using namespace std; vector<int> H; int N; void init(int n, vector<int> h){ H = h; N = n; } void dfs(int head, vector<bool> &vis, vector<set<int>> &tree, int c, int &S, set<int> can){ vis[head] = true; set<int> ncan; for(int i : can){ if(tree[head].find(i) != tree[head].end()){ ncan.insert(i); } } for(int i : ncan){ if(!vis[i]){ dfs(i, vis, tree, c + 1, S, ncan); } } S = max(S, c); } int max_towers(int L, int R, int D){ vector<set<int>> tree(N); for(int i = L; i <= R; i ++){ int maxi = H[i]; for(int j = i; j <= R; j ++){ if(H[i] + D <= maxi && H[j] + D <= maxi){ tree[i].insert(j); tree[j].insert(i); } maxi = max(maxi, H[j]); } } int S = 0; for(int i = L; i <= R; i ++){ vector<bool> vis(N); set<int> can; for(int j : tree[i]){ can.insert(j); } dfs(i, vis, tree, 1, S, can); } return S; }
#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...