vjudge

智商掉线...

可以发现一条边能贡献其他点当且仅当两点路径上这个边权值最小,所以如果按照边权从大到小加边,每加一条边就会合并两个联通块,那么一个联通块内的点到另一个联通块的点的权值就都是那条边的边权,所以可以给两个联通块内的点答案分别加上边权\(*\)另一个联通块点数.然后这个可以用类似重构树的方法维护,具体是每次给两个联通块根节点打标记,然后查询某个点就是根到这个点路径上的标记和

#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double using namespace std;
const int N=2e5+10;
int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
struct node{int x;LL y;};
struct edge
{
int x,y,z;
bool operator < (const edge &bb) const {return z>bb.z;}
}e[N];
int n,pt,ff[N<<1],sz[N<<1],ch[N<<1][2];
LL tg[N<<1],ans;
int findf(int x){return ff[x]==x?x:ff[x]=findf(ff[x]);}
queue<node> q; int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;++i)
ff[i]=i,sz[i]=1;
for(int i=1;i<=n+n;++i) tg[i]=ch[i][0]=ch[i][1]=0;
for(int i=1;i<n;++i)
{
int x=rd(),y=rd(),z=rd();
e[i]=(edge){x,y,z};
}
sort(e+1,e+n);
pt=n;
for(int i=1;i<n;++i)
{
int x=findf(e[i].x),y=findf(e[i].y),z=e[i].z;
tg[x]+=1ll*sz[y]*z,tg[y]+=1ll*sz[x]*z;
++pt,ff[x]=ff[y]=ff[pt]=pt,sz[pt]=sz[x]+sz[y],ch[pt][0]=x,ch[pt][1]=y;
}
ans=0;
q.push((node){pt,0});
while(!q.empty())
{
int x=q.front().x;
LL di=q.front().y;
q.pop();
ans=max(ans,di);
if(!x) continue;
q.push((node){ch[x][0],di+tg[ch[x][0]]});
q.push((node){ch[x][1],di+tg[ch[x][1]]});
}
printf("%lld\n",ans);
}
return 0;
}

HRBUST 1849 商品中心的更多相关文章

  1. Java生鲜电商平台-订单中心服务架构与异常订单逻辑

    Java生鲜电商平台-订单中心服务架构与异常订单逻辑 订单架构实战中阐述了订单系统的重要性,并从订单系统的信息架构和流程上对订单系统有了总体认知,同时还穿插着一些常见的订单业务规则和逻辑.上文写到订单 ...

  2. Java生鲜电商平台-商品基础业务架构设计-商品设计

    Java生鲜电商平台-商品基础业务架构设计-商品设计 在生鲜电商的商品中心,在电子商务公司一般是后台管理商品的地方.在前端而言,是商家为了展示商品信息给用户的地方,它是承担了商品的数据,订单,营销活动 ...

  3. 浅谈我对DDD领域驱动设计的理解

    从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...

  4. ENode框架Conference案例分析系列之 - 上下文划分和领域建模

    前面一片文章,我介绍了Conference案例的核心业务,为了方便后面的分析,我这里再列一下: 业务描述 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的 ...

  5. ENode框架Conference案例分析系列之 - 订单处理减库存的设计

    前言 前面的文章,我介绍了Conference案例的业务.上下文划分.领域模型.架构,以及代码整体流程.接下来想针对案例中一些重要的场景,分别做进一步的分析.本文想先介绍一下Conference案例的 ...

  6. ENode框架Conference案例分析系列之 - 事件溯源如何处理重构问题

    前言 本文可能对大多数不太了解ENode的朋友来说,理解起来比较费劲,这篇文章主要讲思路,而不是一上来就讲结果.我写文章,总是希望能把自己的思考过程尽量能表达出来,能让大家知道每一个设计背后的思考的东 ...

  7. 领域驱动设计(DDD)部分核心概念的个人理解

    领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...

  8. #研发解决方案介绍#基于ES的搜索+筛选+排序解决方案

    郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中 ...

  9. ElasticSearch大数据分布式弹性搜索引擎使用

    阅读目录: 背景 安装 查找.下载rpm包 .执行rpm包安装 配置elasticsearch专属账户和组 设置elasticsearch文件所有者 切换到elasticsearch专属账户测试能否成 ...

随机推荐

  1. PHPSESSID的cookie//session_start()

    如果PHP脚本中有: 1 session_start(); 则说明使用了SESSION. SESSION是一种机制,可以在服务器端跨文件暂时保存数据或传递数据,常用于购物车等方面. SESSION只在 ...

  2. 2019新的开始,新的规划,庆祝CSDN访问量过千

    刚刚看了下博客访问量六千八百七十多个,然后我就自己刷新了一下,留个截图做纪念吧. 每一年都会有很多计划,然而到了年末却发现,未完成的还剩一大半,而完成的却屈指可数. 不过该立的flag还是要立的,顺便 ...

  3. linux工作常用命令

    修改文件后缀 如 将文件application.properties.sample改为application.properties,格式 mv  文件名称.{改前后缀,修改后的目标后缀} 定位到修改文 ...

  4. Android采用pm命令静默卸载应用

    卸载app的方式有多种,可以直接调用android系统的卸载程序,但是这样会调出android卸载提示框,问题就是真的不好看. 所以采用静默卸载的方式,避免弹出系统提示框. 方法一(调用系统卸载程序) ...

  5. HTML控件 隐藏

    div的visibility可以控制div的显示和隐藏,但是隐藏后页面显示空白: style="visibility: none;" document.getElementById ...

  6. linux 实现U盘自动挂载

    某些场景下,服务器可能没有必要的键盘等输入设备.屏幕等输出设备.此时需要在没有人为干预的情况下实现当插入U盘或者硬盘后自动挂载,并执行某些脚本动作.以下是我的实践过程. 必要组件 udev,udisk ...

  7. In an ASP.NET website with a codebehind at what point are the .cs files compiled?

    In an ASP.NET website with a codebehind at what point are the .cs files compiled? This applies to We ...

  8. spark 笔记 2: Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing

    http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf  ucb关于spark的论文,对spark中核心组件RDD最原始.本质的理解, ...

  9. Fragment 的 replace 和 add 方法的区别?

    Fragment 本身并没有 replace 和 add 方法,这里的理解应该为使用 FragmentManager 的 replace 和 add 两种方法切换 Fragment 时有什么不同.我们 ...

  10. Linux_系统破坏性修复实验

    目录 目录 修改系统用户密码 grub修复 系统修复 最后 修改系统用户密码 随便介绍一个修改Linux系统用户密码的方法. 步骤: 开机读秒时按任意键 进入grub列表项配置按e 选择系统kerne ...