제출 #718521

#제출 시각아이디문제언어결과실행 시간메모리
718521parsadox2Dynamic Diameter (CEOI19_diameter)C++14
11 / 100
1216 ms3444 KiB
#include <bits/stdc++.h> #define pb push_back #define F first #define S second #define debug(x) cout << #x << "= " << x << ", " #define ll long long #define fast ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) #define SZ(x) (int) x.size() #define wall cout << endl; using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int maxn = 1e2 + 10; int n , w , q , st[maxn] , fn[maxn] , dis[maxn] , par[maxn]; vector <pair<int , int>> adj[maxn]; vector <int> trav; void dfs(int v , int p = -1) { st[v] = SZ(trav); trav.pb(dis[v]); for(auto u : adj[v]) if(u.F != p) { par[u.F] = v; dis[u.F] = dis[v] + u.S; dfs(u.F , v); trav.pb(dis[v]); } fn[v] = SZ(trav); } void Add(int v , int val) { for(int i = st[v] ; i < fn[v] ; i++) trav[i] += val; } int solve() { int res = 0; for(int i = 0 ; i < SZ(trav) ; i++) for(int j = i ; j < SZ(trav) ; j++) for(int k = j ; k < SZ(trav) ; k++) res = max(res , trav[i] + trav[k] - 2 * trav[j]); return res; } int32_t main() { fast; cin >> n >> q >> w; vector <pair<pair<int , int> , int>> edges; for(int i = 0 ; i < n -1 ; i++) { int v , u , c; cin >> v >> u >> c; adj[v].pb({u , c}); adj[u].pb({v , c}); edges.pb({{u , v} , c}); } dfs(1); int last = 0; while(q--) { int id , val; cin >> id >> val; id = (id + last) % (n - 1); val = (val + last) % w; auto u = edges[id]; int v = u.F.F; if(par[v] != u.F.S) v = u.F.S; int tmp = (val - u.S); Add(v , tmp); last = solve(); edges[id].S = val; cout << last << '\n'; } return 0; }
#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...