Submission #1156964

#TimeUsernameProblemLanguageResultExecution timeMemory
1156964PacybwoahUnique Cities (JOI19_ho_t5)C++20
32 / 100
178 ms43684 KiB
#include<iostream> #include<algorithm> #include<utility> #include<vector> #include<map> #include<cmath> #include<set> using namespace std; vector<vector<int>> graph; vector<int> maxd, maxu, ans; // dep, unique void dfs1(int node, int parent){ multiset<pair<int, int>> s; for(auto &x: graph[node]){ if(x == parent) continue; dfs1(x, node); maxd[node] = max(maxd[node], maxd[x] + 1); s.emplace(maxd[x] + 1, maxu[x] + 1); } if(!s.empty()){ auto iter = prev(s.end()); if((int)s.size() == 1) maxu[node] = (*iter).second; else{ auto iter2 = prev(iter); if((*iter2).first < (*iter).second) maxu[node] = (*iter).second; } } } void dfs2(int node, int parent, int upd, int upu){ multiset<pair<int, int>> s; for(auto &x: graph[node]){ if(x == parent) continue; s.emplace(maxd[x] + 1, maxu[x] + 1); } if(node != 1) s.emplace(upd + 1, upu + 1); if(!s.empty()){ auto iter = prev(s.end()); if((int)s.size() == 1) ans[node] = 1; else{ auto iter2 = prev(iter); if((*iter2).first < (*iter).second) ans[node] = 1; } } for(auto &x: graph[node]){ if(x == parent) continue; s.erase(s.find(make_pair(maxd[x] + 1, maxu[x] + 1))); int downd = 0, downu = 0; if(!s.empty()){ auto iter = prev(s.end()); downd = max(downd, (*iter).first); if((int)s.size() == 1) downu = max(downu, (*iter).second); else{ auto iter2 = prev(iter); if((*iter2).first < (*iter).second) downu = max(downu, (*iter).second); } } dfs2(x, node, downd, downu); s.insert(make_pair(maxd[x] + 1, maxu[x] + 1)); } } int main(){ ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; graph.resize(n + 1); for(int i = 1; i < n; i++){ int a, b; cin >> a >> b; graph[a].push_back(b); graph[b].push_back(a); } for(int i = 0; i < n; i++){ int tmp; cin >> tmp; } maxd.resize(n + 1); maxu.resize(n + 1); ans.resize(n + 1); dfs1(1, 1); dfs2(1, 1, 1, 1); for(int i = 1; i <= n; i++) cout << ans[i] << "\n"; } // g++ -std=c++17 -Wall -Wextra -Wshadow -fsanitize=undefined -fsanitize=address -o run pE.cpp
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...