제출 #689723

#제출 시각아이디문제언어결과실행 시간메모리
689723overwatch9Dynamic Diameter (CEOI19_diameter)C++17
11 / 100
5049 ms6364 KiB
// subtask12 #include <iostream> #include <vector> using namespace std; using ll = long long; const int MAX_N = 5000 + 1; ll adj[MAX_N][MAX_N]; struct edge { int a, b; ll w; }; edge edges[MAX_N]; int node; ll max_dis; int N, Q; ll W; void dfs(int s, int p, ll dis) { if (dis > max_dis) { node = s; max_dis = dis; } for (int i = 1; i <= N; i++) { if (i != s && adj[s][i] != 0 && i != p) dfs(i, s, dis + adj[i][s]); } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> N >> Q >> W; for (int i = 0; i < N-1; i++) { int a, b; ll w; cin >> a >> b >> w; adj[a][b] = adj[b][a] = w; edge tp; tp.a = a; tp.b = b; tp.w = w; edges[i] = tp; } ll last = 0; while (Q--) { ll d; ll e; cin >> d >> e; d = (d + last) % (N-1); e = (e + last) % (W); int a = edges[d].a, b = edges[d].b; adj[a][b] = adj[b][a] = e; edges[d].w = e; max_dis = 0; dfs(1, 1, 0); max_dis = 0; dfs(node, node, 0); last = max_dis; cout << max_dis << '\n'; } }
#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...