제출 #501012

#제출 시각아이디문제언어결과실행 시간메모리
501012InternetPerson10Dynamic Diameter (CEOI19_diameter)C++17
24 / 100
5063 ms13380 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; vector<vector<pair<int, ll>>> adj; vector<pair<int, int>> pa; vector<pair<int, ll>> dist; bool isStar = false; multiset<ll> s; void init(int n, int q, ll l, vector<int> u, vector<int> v, vector<ll> w) { pa.resize(n-1); adj.resize(n); s.insert(0); for(int i = 0; i < n-1; i++) { u[i]--; v[i]--; pa[i] = {u[i], v[i]}; adj[u[i]].push_back({v[i], w[i]}); adj[v[i]].push_back({u[i], w[i]}); } if(adj[0].size() == n-1) { // subtask 3 isStar = true; s.insert(0); for(int i = 0; i < n-1; i++) { s.insert(w[i]); } } for(int i = 0; i < n; i++) sort(adj[i].begin(), adj[i].end()); dist.resize(n); } void dfs(int n, ll dis = 0, int par = -1) { dist[n] = {dis, n}; for(auto ch : adj[n]) { if(ch.first == par) continue; dfs(ch.first, dis + ch.second, n); } } ll get_diameter(int d, ll e) { int x, y; tie(x, y) = pa[d]; int l = 0, r = adj[x].size(); while(l != r-1) { int mid = (l+r)/2; if(adj[x][mid].first <= y) l = mid; else r = mid; } adj[x][l].second = e; l = 0; r = adj[y].size(); while(l != r-1) { int mid = (l+r)/2; if(adj[y][mid].first <= x) l = mid; else r = mid; } if(isStar) { auto it = s.find(adj[y][l].second); s.erase(it); s.insert(e); it = s.end(); it--; ll ans = *it; it--; return ans + (*it); } adj[y][l].second = e; dfs(0); sort(dist.rbegin(), dist.rend()); dfs(dist[0].second); sort(dist.rbegin(), dist.rend()); return dist[0].first; } int main() { ios::sync_with_stdio(false); cin.tie(0); int n, q; ll l; cin >> n >> q >> l; vector<int> u(n-1), v(n-1); vector<ll> w(n-1); for(int i = 0; i < n-1; i++) { cin >> u[i] >> v[i] >> w[i]; } init(n, q, l, u, v, w); ll last = 0; for(int i = 0; i < q; i++) { ll d, e; cin >> d >> e; d += last; d %= n-1; e += last; e %= l; last = get_diameter(d, e); cout << last << '\n'; } }

컴파일 시 표준 에러 (stderr) 메시지

diameter.cpp: In function 'void init(int, int, ll, std::vector<int>, std::vector<int>, std::vector<long long int>)':
diameter.cpp:22:22: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   22 |     if(adj[0].size() == n-1) { // subtask 3
      |        ~~~~~~~~~~~~~~^~~~~~
#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...