差分还原的时候为什么上面这种判重是错的,下面就是对的
// void dfs(int x, int &ans) { // if(vis[x]) return; // val[x] = diff[x]; // vis[x] = true; // for(int i = head[x]; i; i = edge[i].next) { // int y = edge[i].to; // dfs(y, ans); // val[x] += val[y]; // } // ans = max(ans, val[x]); // } void dfs(int x, int fa, int &ans) { for(int i = head[x]; i; i = edge[i].next) { int y = edge[i].to; if(y == fa) continue; dfs(y, x, ans); diff[x] += diff[y]; } ans = max(ans, diff[x]); }