n<=1e6的树问所有路径的极差之和。

被遗忘的套路。。。以后绝对不会再忘了QAQ

只要算最大值之和即可,最小值同理。数字从大到小排序(反正都是要排序的,如果从大到小不行等会反过来试试),然后逐个考虑贡献,这样的话考虑完一个点就得把这个点周围所有的边断掉表示经过这些边的路径(即经过当前点的路径)不再计算。断边麻烦,连边简单,那就整个反过来,数字从小到大排序,逐个考虑贡献,考虑完这个点把他和周围的点连起来即可。

 #include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
//#include<assert.h>
#include<algorithm>
//#include<iostream>
//#include<bitset>
using namespace std; int n;
#define maxn 1000011
struct Edge{int to,next;}edge[maxn<<]; int first[maxn],le=,val[maxn];
void in(int x,int y) {Edge &e=edge[le]; e.to=y; e.next=first[x]; first[x]=le++;}
void insert(int x,int y) {in(x,y); in(y,x);} int ufs[maxn],size[maxn];
int find(int x) {return x==ufs[x]?x:(ufs[x]=find(ufs[x]));} #define LL long long
LL ans=; int num[maxn];
bool cmp(const int &a,const int &b) {return val[a]<val[b];} bool vis[maxn];
void solve()
{
memset(vis,,sizeof(vis));
for (int i=;i<=n;i++) ufs[i]=i,size[i]=;
for (int i=;i<=n;i++)
{
int now=num[i]; vis[now]=;
LL tmp=,last=;
for (int j=first[now];j;j=edge[j].next)
{
const Edge &e=edge[j]; if (!vis[e.to]) continue;
int x=find(now),y=find(e.to);
tmp+=(last+)*size[y]; last+=size[y];
ufs[y]=x; size[x]+=size[y];
}
ans+=tmp*val[now];
}
} int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d",&val[i]);
for (int i=,x,y;i<n;i++)
{
scanf("%d%d",&x,&y);
insert(x,y);
}
for (int i=;i<=n;i++) num[i]=i;
sort(num+,num++n,cmp); solve();
for (int i=;i<=n;i++) val[i]=-val[i];
sort(num+,num++n,cmp); solve();
printf("%lld\n",ans);
return ;
}

Codeforces915F. Imbalance Value of a Tree的更多相关文章

  1. Codeforces 915F Imbalance Value of a Tree

    Imbalance Value of a Tree 感觉这种题没啥营养, 排个序算算贡献就好啦. #include<bits/stdc++.h> #define LL long long ...

  2. 【CodeForces】915 F. Imbalance Value of a Tree 并查集

    [题目]F. Imbalance Value of a Tree [题意]给定n个点的带点权树,求所有路径极差的和.n,ai<=10^6 [算法]并查集 [题解]先计算最大值的和,按点权从小到大 ...

  3. [CF915F]Imbalance Value of a Tree

    [CF915F]Imbalance Value of a Tree 题目大意: 一棵\(n(n\le10^6)\)个结点的树,每个结点有一个权值\(w_i\).定义\(I(i,j)\)为\(i\)到\ ...

  4. Codeforces 915F Imbalance Value of a Tree(并查集)

    题目链接  Imbalance Value of a Tree 题意  给定一棵树.求树上所有简单路径中的最大权值与最小权值的差值的和. 首先考虑求所有简单路径中的最大权值和. 对所有点按照权值大小升 ...

  5. Codeforces 915 F. Imbalance Value of a Tree(并查集)

    F. Imbalance Value of a Tree 题意: 给一颗带点权的树,求所有简单路径上最大点权和最小点权之差的总和. 思路: 所求问题可以看作求各路径上的最大值之和减各路径上的最小值之和 ...

  6. Imbalance Value of a Tree CodeForces - 915F

    链接 大意: 给定树, 求树上所有链上最大值最小值之差 817D的树上版本, 用并查集维护即可. 817D由于是链的情况并查集不必压缩路径即可达到均摊$O(n)$, 该题必须压缩, 复杂度$O(nlo ...

  7. CF915F Imbalance Value of a Tree (并查集)

    题目大意:给你一棵树,每个点有点权a_{i},求$\sum _{i=1}^{n} \sum _{j=i}^{n} f(i,j)$,$f(i,j)$表示i,j,路径上的点的最大权值-最小权值 正解的思路 ...

  8. 记第一场cf比赛(Codeforces915)

    比赛感想 本来21:05开始的比赛,结果记成21:30了...晚了25分钟才开始[捂脸] 这次是Educational Round,所以还比较简单. 前两道题一眼看去模拟+贪心,怕错仔细看了好几遍题, ...

  9. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

随机推荐

  1. hbase rpc这点事

    年前的时候系统梳理了一下hbase rpc的实现,并且对组里的小伙伴做了一次分享.趁着热乎劲还没完全消失殆尽,准备赶紧记录下来. hbase中rpc概况 作为一个分布式系统,hbase的设计是典型的m ...

  2. c#中stringbuilder的方法总结

    String 对象是不可改变的.每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新 ...

  3. AJPFX:学习JAVA程序员两个必会的冒泡和选择排序

    * 数组排序(冒泡排序)* * 冒泡排序: 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处* * 选择排序 : 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现 ...

  4. 使用过Fetch之后,你还想使用AJAX吗

    之前做数据交互的时候,请求数据一直使用ajax,看到网上有使用Fetch,所以也想拿来尝尝鲜 本次介绍只涉及fetch相关,传统的ajax基本上不涉及 当然你也要考虑兼容.浏览器支持情况. 一会这个只 ...

  5. Android IJKPlayer缓冲区设置以及播放一段时间出错解决方案

    IJKPlayer拖动播放进度会导致重新请求数据,未使用已经缓冲好的数据,所以应该尽量控制缓冲区大小,减少不必要的数据损失. mMediaPlayer.setOption(IjkMediaPlayer ...

  6. 数据库text字段存值用回车分隔

    //查询 $sql = "SELECT attr_values FROM ecs_attribute WHERE attr_id=197"; $param_sel_sms = ar ...

  7. Maven之——使用本地jar包并打包进war包里面的方法

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52594602 很显然,这种方法是很不可取的,因为Maven是用来团队合作,以及发布 ...

  8. SparkRPC源码分析之RPC管道与消息类型

    SparkRPC源码分析之RPC管道与消息类型我们前面看过了netty基础知识扫盲,那我们应该明白,ChannelHandler这个组件内为channel的各种事件提供了处理逻辑,也就是主要业务逻辑写 ...

  9. 模拟Java-Sping,实现其IOC和AOP核心

    简易的IOC框图 注解的方式实现了左边的分支,那么就剩下右边的XML分支: XmlContext:这个类是也是AbstractApplicationContext的子类,和AnnotationCont ...

  10. H5 canvas 直线和三角形

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...