Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <bits/stdc++.h>using namespace std;const int MAXN = 100005;const int INF = 0x3f3f3f3f;int n, ans;int w[MAXN];int minv[MAXN], maxv[MAXN];vector<int> G[MAXN];int dfs_min(int u){if (minv[u]!=INF) return minv[u];int tmin = INF;for (int i = 0; i < G[u].size(); i++){int v = G[u][i];tmin = min(tmin, dfs_min(v));}if (tmin!=INF) ans = max(ans, abs(w[u]-tmin));return minv[u] = min(tmin, w[u]);}int dfs_max(int u){if (maxv[u]!=-1) return maxv[u];int tmax = -1;for (int i = 0; i < G[u].size(); i++){int v = G[u][i];tmax = max(tmax, dfs_max(v));