首页 > 其他分享 >CF1092F Tree with Maximum Cost

CF1092F Tree with Maximum Cost

时间:2022-10-25 15:36:15浏览次数:105  
标签:fr int siz ca Tree Maximum edge Cost dis


题目链接:​​传送门​

是​​这个题​​​的一个变形
就是最小值改成最大值
懒了
直接改了改当时的代码
当时的题解里也有解析

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <complex>
#include <algorithm>
#include <climits>
#define
#define

using namespace std;
struct node {
int next, to; ll dis;
}edge[A];
int head[A], num_edge;
void add_edge(int from, int to, ll dis) {
edge[++num_edge].next = head[from];
edge[num_edge].to = to;
edge[num_edge].dis = dis;
head[from] = num_edge;
}
ll siz[A], dis[A], f[A], ans = -9223372036854775807, sum;
int n, a, b;
void dfs(int fr, int fa) {
for (int i = head[fr]; i; i = edge[i].next) {
int ca = edge[i].to;
if (ca == fa) continue;
dfs(ca, fr);
siz[fr] += siz[ca];
dis[fr] += dis[ca] + edge[i].dis * siz[ca];
}
}
void dd(int fr, int fa) {
ans = max(ans, f[fr]);
for (int i = head[fr]; i; i = edge[i].next) {
int ca = edge[i].to;
if (ca == fa) continue;
f[ca] = f[fr] + (sum - siz[ca]) * edge[i].dis - siz[ca] * edge[i].dis;
dd(ca, fr);
}
}

int main(int argc, const char *argv[]) {
cin >> n;
for (int i = 1; i <= n; i++) cin >> siz[i], sum += siz[i];
for (int i = 1; i < n; i++) {
cin >> a >> b;
add_edge(a, b, 1);
add_edge(b, a, 1);
}
dfs(1, 0); f[1] = dis[1]; dd(1, 0);
if (ans == -9223372036854775807) puts("0");
else cout << ans << endl;
}


标签:fr,int,siz,ca,Tree,Maximum,edge,Cost,dis
From: https://blog.51cto.com/lyle/5794776

相关文章

  • D. Min Cost String
    传送门题意:构造一个字符串,长度为n,只能出现前k个小写字符,要求花费最小,花费为对于\(i<j,s[i]==s[j]且s[i+1]==s[j+1]\)则就记为一个花费思路:首先,想一个问......
  • CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
    CF741DArpa’sletter-markedtreeandMehrdad’sDokhtar-koshpaths给定一颗以\(1\)为根的树每个节点上有一个\(a\simv\)的小写字母,求每个子树内最长的链的长度......
  • web技术分享| 虚拟 tree
    查了好久,觉得使用AntDesignVue中的Tree树形控件因项目需求,节点的移动不通过拖拽移动,需要通过弹窗实现节点的移动,因此基于添加、删除实现。当前仅使用节点添加、删除......
  • web技术分享| 虚拟 tree
    查了好久,觉得使用AntDesignVue中的Tree树形控件因项目需求,节点的移动不通过拖拽移动,需要通过弹窗实现节点的移动,因此基于添加、删除实现。当前仅使用节点添加、删......
  • 7.TreeMap源码解析
    1.数据结构TreeMap的底层数据结构是红黑树,和HashMap的红黑树结构一样。不同的是,TreeMap利用红黑树左节点小,右节点大的性质,根据key进行排序,使每个元素能够插入到红黑树的适......
  • UVA 11594(All Pairs Maximum Flow-两两之间的最大流,Gusfield算法)
    已知一个n<=100个点的无向图,求任意两点间的最大流(最小割)Gusfield专门解决这类问题#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<func......
  • 2.9 复制文件和文件夹 shutil模块 shutil.copy shutil.copytree
    #复制文件:shutil.copy(要复制的文件,要复制文件的位置)#复制文件夹:shutil.copytree(要复制的文件夹,要复制文件夹的位置)-----------------------------------------......
  • PriorityQueue 最小堆&& treemap
    优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(naturalorder......
  • Codeforces 1682 D Circular Spanning Tree
    题意1-n排列,构成一个圆;1-n每个点有个值0或者1,0代表点的度为偶数,1代表点的度为计数;询问能否构成一棵树,树的连边在圆内不会相交,在圆边上可以相交,可以则输出方案。提示1.......
  • loj3885. 「eJOI2022」Bounded Spanning Tree
    草稿:非树边\(u,v,[l,r]\)把\(u,v\)路径上所有边上界与\(r-1\)取个\(\min\)。剩下的边左端点排序后贪心,每次取右端点最小的一个元素。开始只考虑树边。当前加入一......