树分治。对于一棵子树的根节点,至少有一条边与儿子相连的属于重边。对于一条轻边,它的贡献值是两端子树大小的乘积,所以,重边应该是贡献值最大的一边。

至于要求所有的点,进行深度优先搜索,因为移动一个点只会影响两个点的两个子树,这个可以维护。

在进行DP时,选择计算最大的重边的值,答案就是用所有的边贡献值减去树的重边值的和。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std; const int MAX=100010; int head[MAX],tol;
struct Edge{
int u,v,next;
}edge[MAX*2];
int n; void addedge(int u,int v){
edge[tol].u=u;
edge[tol].v=v;
edge[tol].next=head[u];
head[u]=tol++;
} int counts[MAX]; LL dp[MAX];
int weight1[MAX],weight2[MAX];
LL ans[MAX],tot[MAX],par[MAX]; void dfs(int u,int f){
counts[u]=1;
weight1[u]=weight2[u]=-1;
for(int e=head[u];e!=-1;e=edge[e].next){
int v=edge[e].v;
if(v!=f){
dfs(v,u);
counts[u]+=counts[v];
dp[u]+=dp[v];
if(weight1[u]==-1||(LL)(n-counts[v])*counts[v]>(LL)(n-counts[weight1[u]])*counts[weight1[u]]){
weight2[u]=weight1[u]; weight1[u]=v;
}
else if(weight2[u]==-1||(LL)(n-counts[v])*counts[v]>(LL)(n-counts[weight2[u]])*counts[weight2[u]]){
weight2[u]=v;
}
/// dp[u]+=(n-counts[v])*counts[v];
}
}
tot[u]=dp[u];
if(counts[u]>1){
dp[u]+=(LL)(n-counts[weight1[u]])*counts[weight1[u]];
}
} void dfs_ans(int u,int f){
for(int e=head[u];e!=-1;e=edge[e].next){
int v=edge[e].v;
if(v==f) continue;
if(v==weight1[u]){
LL num=max((LL)(n-counts[u])*counts[u],(LL)(n-counts[weight2[u]])*counts[weight2[u]]);
par[v]=tot[u]-dp[v]+par[u]+num;
}
else{
LL num=max((LL)(n-counts[u])*counts[u],(LL)(n-counts[weight1[u]])*counts[weight1[u]]);
par[v]=tot[u]-dp[v]+par[u]+num;
}
dfs_ans(v,u);
}
LL num=max((LL)(n-counts[weight1[u]])*counts[weight1[u]],(LL)(n-counts[u])*counts[u]);
ans[u]=par[u]+tot[u]+num;
} int main(){
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++) head[i]=-1,counts[i]=0,dp[i]=0,par[i]=0;
tol=0;
int u,v;
for(int i=1;i<n;i++){
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
dfs(1,0);
dfs_ans(1,0);
LL ans_tot=0;
for(int i=1;i<=n;i++) ans_tot+=(LL)counts[i]*(n-counts[i]);
for(int i=1;i<=n;i++) cout<<ans_tot-ans[i]<<endl;
}
return 0;
}

  

HIHO 16 C的更多相关文章

  1. HIHO 16 B

    卡了~卡了就写不下去了~其实是不会~ 大牛提醒,答案必定是SUM的因子~细细想了好久,才想通~差距~ 因为是所有的和GCD,所以GCD必定整除SUM.. 然后,枚举这些因子,统计前缀和的MOD,看有多 ...

  2. hiho一下:Beautiful String

    hiho一下:Beautiful String 记不清这是 hiho一下第几周的题目了,题目不难,不过对于练习编程,训练思维很有帮助.况且当时笔者处于学习算法的早期, 所以也希望刚接触算法的同学能多去 ...

  3. 在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误

    1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8   在安装的时候报错: -1ubu1604-amd64.deb 提示: ...

  4. Ubuntu 16.10 安装KolourPaint 4画图工具

    KolourPaint 4画图工具简单实用,可以绘画.视频处理和图标编辑: • 绘画:绘制图表和“手绘” • 视频处理:编辑截图和照片;应用特效 • 图标编辑:绘画剪贴和标识透明化 1.在Ubuntu ...

  5. 真正的汉化-PowerDesigner 16.5 汉化

    一.背景 经常使用PowerDesigner,之前使用15版本,后来16出来后,就一直在使用16,不过一直是英文.一些同事对使用英文版总显示有些吃力. 遍寻百度.必应,都没有找到真正的针对版本16的汉 ...

  6. Win7安装MySQL-5.7.16过程

    1.在C盘新建MYSQL文件夹:2.将mysql-5.7.16-winx64拷贝到C:\MYSQL文件夹下,更名为mysql-5.7.16:3.在mysql-5.7.16目录下,建my.ini文件,内 ...

  7. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...

  8. 企业IT管理员IE11升级指南【16】—— 使用Compat Inspector快速定位IE兼容性问题

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  9. ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project ...

随机推荐

  1. 基于docker的tomcat服务化

    tomcat作为web容器被广泛应用,但作者所在的公司restful接口特别多,每个接口都需要一个tomcat来启动,为了配置隔离,一般都会把tomcat安装文件复制多遍,分别把war包部署在对应的w ...

  2. 【转】关于Java基础你不得不会的34个问题

    1. 面向对象和面向过程的区别 面向过程 优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采用面向过程开发,性能是最重要的 ...

  3. 大圆那些事 LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别

    LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别 LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下: LIBRARY ...

  4. HDU 5279 分治NTT 图的计数

    思路: 显然每个子图内都是森林 去掉所有子图1和n都连通且每条大边都存在的情况 直接DP上 NTT优化一波 注意前两项的值.. //By SiriusRen #include <bits/std ...

  5. Elasticsearch之sense插件安装之后的浏览详解

    前提博客是 Elasticsearch之sense插件的安装(图文详解) 立马,可以看到 http://192.168.80.145:5601/app/sense 以后更新

  6. [转]通过Net Manager 配置Oracle 11g本地监听服务(listener service)

    本文转自:http://blog.csdn.net/mozart_cai/article/details/8596504 [Target] 通过ip address 监听orcl服务,而不是通过loc ...

  7. 大数据插入Excel报错处理

    发现问题: 最近运行程序时,发现了一个问题,就是在导出excel时,报了一下错误 分析问题: 原来是由于NPOI这个动态库导致的,然后看了下版本,发现是1.2.5.然后百度了下,发现这个版本的NPOI ...

  8. html——特例

    1.a标签与a标签之间有3px距离 2.标准流中的文字不会被浮动的盒子遮挡 <div style="width:150px;height:150px;background-color: ...

  9. Tcl之Lab1

    Task 1. Use help 1) What is the default switch for the redirect command? -file help -v redirect # or ...

  10. CSS3 background-origin 属性

    CSS3 background-origin 属性 padding-box 背景图像相对于内边距框来定位. border-box 背景图像相对于边框盒来定位. content-box 背景图像相对于内 ...