1001. Diversity
题意
给你一棵n个点的树,对于节点i,你要给它标上一个 [ l i , r i ] [ l_{i}, r_{i}] [li,ri]之间的数,要求所有边两端节点上标的数字的差的绝对值的总和最大。
解法
一开始以为一边取大一边取小就会最优
其实不对 所以最后写了一遍树形DP
/*
Algorithm:
Author: anthony1314
Creat Time:
Time Complexity:
*/
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <bitset>
#include <stack>
#include <cmath>
#include <deque>
#include <queue>
#include <list>
#include <set>
#include <map>
#define line printf("---------------------------\n")
#define mem(a, b) memset(a, b, sizeof(a))
#define pi acos(-1)
#define endl '\n'
using namespace std;
typedef long long ll;
typedef double db;
const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;
const int maxn = 2e5+10;
void add(int &x, int y) {
x = (x + y) % mod;
}
ll dp[maxn][2];
vector<int> g[maxn];
ll l[maxn], r[maxn];
void dfs(int root, int x) {
int len = g[root].size();