求助为什么TLE
查看原帖
求助为什么TLE
974277
水星湖psgqwq楼主2024/8/8 13:08
#include <bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;

const int N = 5e3 + 5;
int n, d1[N], d2[N], p, q;
vector<pair<int, int> > g[N];

void dfs(int u, int fa, int *d, int x) {
    for(auto [v, w] : g[u]) {
        if(v == fa || v == x) continue;
        d[v] = d[u] + w;
        dfs(v, u, d, x);   
    }
}

int solve(int x, int y, int k) {
    memset(d1, 0, sizeof(d1));
    memset(d2, 0, sizeof(d2));
    dfs(x, 0, d1, y);
    p = max_element(d1 + 1, d1 + n + 1) - d1;
    memset(d1, 0, sizeof(d1));
    dfs(p, 0, d1, y);
    q = max_element(d1 + 1, d1 + n + 1) - d1;
    int zhi1 = *max_element(d1 + 1, d1 + n + 1);
    dfs(q, 0, d2, y);
    int mina = 2e9;
    for(int i = 1; i <= n; i++) 
        if(d1[i] || d2[i])
            mina = min(mina, max(d1[i], d2[i]));
    memset(d1, 0, sizeof(d1));
    memset(d2, 0, sizeof(d2));
    dfs(y, 0, d1, x);
    p = max_element(d1 + 1, d1 + n + 1) - d1;
    memset(d1, 0, sizeof(d1));
    dfs(p, 0, d1, x);
    q = max_element(d1 + 1, d1 + n + 1) - d1;
    int zhi2 = *max_element(d1 + 1, d1 + n + 1);
    dfs(q, 0, d2, x);
    int minb = 2e9;
    for(int i = 1; i <= n; i++) 
        if(d1[i] || d2[i])
            minb = min(minb, max(d1[i], d2[i]));
    mina = mina == 2e9 ? 0 : mina;
    minb = minb == 2e9 ? 0 : minb;
    return max({mina + k + minb, zhi1, zhi2});
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n;
    for(int i = 1, u, v, w; i < n; i++) {
        cin >> u >> v >> w;
        g[u].push_back({v, w});
        g[v].push_back({u, w});        
    }
    int ans = 2e9;
    for(int i = 1; i <= n; i++) {
        for(auto [j, w] : g[i]) {
            ans = min(ans, solve(i, j, w));
        }
    }
    cout << ans;
    return 0;
}


2024/8/8 13:08
加载中...