首页 > 其他分享 > 树距离

树距离

时间:2023-08-22 20:45:11浏览次数:36  
标签:fr int long fa MaxN 距离 include

树距离

类似题

题意

对于一个 \(N\) 个节点,\(N−1\) 条无向边组成的树,我们规定两点之间的距离 \(dis(u,v)\) 为两点唯一简单路径上的最小边权。给定树的结构,对于树上每一个节点 \(1\le i\le N\), 请计算出 image。特别的,我们定义 \(dis(i,i)=0\)。

思路

并查集,然后用于类似题相同的思路,可以记录生成树,然后在便利生成树时,记录答案即可。

code

点击查看代码
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

const int MaxN = 2e5 + 10;

struct S {
  int a, b, w;
} e[MaxN];

int fa[MaxN], n, m, cnt;
long long c[MaxN], ans[MaxN];
vector<int> g[MaxN];

int fr(int x) {
  return (fa[x] < 0 ? x : fa[x] = fr(fa[x]));
}

void Merge(int x, int y, int w) {
  x = fr(x), y = fr(y);
  if (x == y) {
    return;
  }
  if (fa[x] < fa[y]) {
    swap(x, y);
  }
  g[y].push_back(x);
  cnt++;
  c[y] += -1ll * fa[x] * w, c[x] += -1ll * fa[y] * w - c[y];
  fa[y] += fa[x], fa[x] = y;
}

void DFS(int x, long long sum) {
  ans[x] = sum;
  for (int i : g[x]) {
    DFS(i, sum + c[i]);
  }
}

int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  freopen("treeDis.in", "r", stdin);
  freopen("treeDis.out", "w", stdout);
  cin >> n;
  fill(fa + 1, fa + n + 1, -1);
  for  (int i = 1, u, v, w; i < n; i++) {
    cin >> u >> v >> w;
    e[i] = {u, v, w};
  }
  sort(e + 1, e + n, [](S a, S b){return a.w > b.w;});
  for (int i = 1; i < n; i++) {
    Merge(e[i].a, e[i].b, e[i].w);
  }
  for (int i = 1; i <= n; i++) {
    if (fa[i] < 0) {
      DFS(i, c[i]);
    }
  }
  for (int i = 1; i <= n; i++) {
    cout << ans[i] << endl;
  }
  return 0;
}

标签:fr,int,long,fa,MaxN,距离,include
From: https://www.cnblogs.com/ybtarr/p/17647126.html

相关文章

  • Leetcode 849. 到最近的人的最大距离
    题目描述给你一个数组seats表示一排座位,其中seats[i]=1代表有人坐在第i个座位上,seats[i]=0代表座位i上是空的(下标从0开始)。至少有一个空座位,且至少有一人已经坐在座位上。亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。返回他到离......
  • 数学——点到线段的最短距离
    点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线段最短距离时需要考虑参考点在沿线段方向的投影点是否在线段上,若在线段上才可采用点到直线距离公式。通俗的说,我们按照求点到直线的距离作垂线后,交点不一定在线段上。如图\(1\)所示。通常......
  • 为啥网线都会限制传输距离为100米?
    下午好,我的网工朋友。大部分网工都经历过网络布线这件事儿吧。无论是五类双绞线,还是六类双绞线,传输距离都是100米。而且,在综合布线规范中,水平布线不能超过90米,链路总长度不能超过100米。换句话说,“100米”是有线以太网布线的一个极限。这个说法到底怎么来的,有啥依据,具体施工现场怎......
  • 高斯白噪声下雷达测量精度---------距离精度公式详细推导
    一、背景前面写的一篇博客毫米波雷达入门知识里面介绍了距离精度、速度精度和角度精度。并给出了一个简单公式来说明哪些因素影响它们的大小。但具体怎么得到的并未说明,正好前两天在《现代雷达系统分析和设计》这本书上有看见相关内容,就趁着周末,再加上光明区的这个图书馆这么......
  • *【学习笔记】(23) 常用距离算法详解
    本文主要讲述这三种常见距离算法:欧氏距离,曼哈顿距离,切比雪夫距离。1.欧氏距离欧氏距离是最易于理解的一种距离算法。在数学的平面直角坐标系中,设点\(A,B\)的坐标分别为\(A(x_1,y_1),B(x_2,y_2)\),求点\(A,B\)之间的距离,我们一般会使用如下公式:\[\left|AB\right|=......
  • 8.18-零件出图(水路出图-线割出图)-顶出距离=产品最深胶位+15 ( 相加不满20设置为20 )
    上下顺序是:零件出图-水路出图-线割出图  ......
  • Java计算两点间的距离
    publicclassPointUtils{publicstaticvoidmain(String[]args){BigDecimalx1=newBigDecimal("0");BigDecimaly1=newBigDecimal("0");BigDecimalx2=newBigDecimal("-1");BigDecimal......
  • 两条直线轮廓的距离
    1dev_close_window()2read_image(Image,'测量/0.bmp')3get_image_size(Image,Width,Height)4dev_open_window(0,0,Width,Height,'black',WindowHandle)56dev_display(Image)78*绘制直线9draw_line(WindowHan......
  • 【GIS - 地理信息系统】经纬度计算 ( 经度、纬度概念 | 地球周长计算 | 地球经线周长
    文章目录一、经度、纬度概念二、地球周长计算1、地球半径、周长计算2、地球经线周长计算3、地球纬线周长计算三、经纬度相关计算1、经纬度坐标距离计算公式2、经纬度与实际距离换算1米对应经度1米对应纬度3、实际距离与经纬度换算1度经度对应东西距离1度纬度对应南北距离四、......
  • 【BZOJ 3364】Distance Queries 距离咨询 题解
    原题简化题意:有一棵\(n\)个点的树,\(q\)组询问,每次询问回答两点间的距离。令\(dis[i][j]\)表示\(i\)到\(j\)的距离,根节点为\(rt\),则有\(dis[i][j]=dis[rt][i]+dis[rt][j]-2×dis[rt][lca(i,j)]\),按照题意打即可。#include<bits/stdc++.h>usingnamespacestd;#d......