제출 #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...