제출 #446249

#제출 시각아이디문제언어결과실행 시간메모리
446249benedict0724Dynamic Diameter (CEOI19_diameter)C++17
24 / 100
5042 ms59668 KiB
#include <bits/stdc++.h>

using namespace std;

int cost[5002][5002], dist[5002];
vector<int> adj[5002];
pair<int, int> E[5002];
const int INF = 1e9;

void dfs(int x, int p = -1)
{
    for(int i : adj[x])
    {
        if(i == p) continue;
        dist[i] = dist[x] + cost[x][i];
        dfs(i, x);
    }
}

int main()
{
    ios::sync_with_stdio(false); cin.tie(NULL);
    int n, q, w; cin >> n >> q >> w;
    for(int i=0;i<n-1;i++)
    {
        int s, e, c; cin >> s >> e >> c;
        E[i] = {s, e};
        adj[s].push_back(e);
        adj[e].push_back(s);
        cost[s][e] = cost[e][s] = c;
    }

    int last = 0;
    for(int i=1;i<=q;i++)
    {
        int d, e;
        cin >> d >> e;
        d = (d + last)%(n-1);
        e = (e + last)%w;
        int a = E[d].first, b = E[d].second;
        cost[a][b] = cost[b][a] = e;

        dist[1] = 0;
        dfs(1);
        int next = 1;
        for(int i=1;i<=n;i++) if(dist[next] < dist[i]) next = i;
        dist[next] = 0;
        dfs(next);
        int ans = 0;
        for(int i=1;i<=n;i++) ans = max(ans, dist[i]);
        cout << ans << "\n";
        last = ans;
    }
}
#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...