1405 树的距离之和

基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题

给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之和。
Input
第一行包含一个正整数n (n <= 100000),表示节点个数。
后面(n - 1)行,每行两个整数表示树的边。
Output
每行一个整数,第i(i = 1,2,...n)行表示所有节点到第i个点的距离之和。
Input示例
4
1 2
3 2
4 2
Output示例
5
3
5
5

/*
51 nod 1405 树的距离之和problem:
给定一棵无根树,假设它有n个节点,节点编号从1到n, 对于每个i求所有点到i的和。solve:
假设已经知道了所有点到u的和, 对于它右儿子v的和,可以发现增加了Size[左子树]条uv边.减少了Size[v]条uv边
所以先求出所有点到1的和,然后可以推出其它所有点hhh-2016/09/13-20:15:59
*/
#pragma comment(linker,"/STACK:124000000,124000000")
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <vector>
#include <math.h>
#include <queue>
#include <set>
#include <map>
#define lson  i<<1
#define rson  i<<1|1
#define ll long long
#define clr(a,b) memset(a,b,sizeof(a))
#define scanfi(a) scanf("%d",&a)
#define scanfs(a) scanf("%s",a)
#define scanfl(a) scanf("%I64d",&a)
#define scanfd(a) scanf("%lf",&a)
#define key_val ch[ch[root][1]][0]
#define eps 1e-7
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
const int maxn = 100110;template<class T> void read(T&num)
{char CH;bool F=false;for(CH=getchar(); CH<'0'||CH>'9'; F= CH=='-',CH=getchar());for(num=0; CH>='0'&&CH<='9'; num=num*10+CH-'0',CH=getchar());F && (num=-num);
}
int stk[70], tp;
template<class T> inline void print(T p)
{if(!p){puts("0");return;}while(p) stk[++ tp] = p%10, p/=10;while(tp) putchar(stk[tp--] + '0');putchar('\n');
}ll ans[maxn];
struct node
{int to,next;
}edge[maxn <<2];int tot,n;
int head[maxn];
int Size[maxn];
ll f[maxn];
void add_edge(int u,int v)
{edge[tot].to = v,edge[tot].next = head[u],head[u] = tot ++;
}void dfs(int u,ll len,int pre)
{f[u] = len;Size[u] = 1;for(int i = head[u]; i != -1;i = edge[i].next ){int v = edge[i].to;if(v == pre)continue;dfs(v,len+1,u);Size[u] += Size[v];}
}void solve(int u,ll tans,int pre)
{ans[u] = tans;for(int i = head[u];i != -1;i = edge[i].next){int v = edge[i].to;if(v == pre)continue;ll t = n-Size[v]*2;solve(v, (ll)tans + t,u);}
}void init()
{tot = 0;clr(head,-1);
}int main()
{int u,v;while(scanfi(n) != EOF){init();for(int i = 1;i < n;i++){scanfi(u),scanfi(v);add_edge(u,v);add_edge(v,u);}dfs(1,0,-1);ll ta = 0;for(int i =1;i <= n;i++)ta += f[i];solve(1,ta,-1);for(int i = 1;i <= n;i++){print(ans[i]);}}
}

  

转载于:https://www.cnblogs.com/Przz/p/5869667.html

51 nod 1405 树的距离之和相关推荐

  1. 1405 树的距离之和

    1405 树的距离之和 基准时间限制:1 秒 空间限制:131072 KB 给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之和. Input 第一行包含一个正整 ...

  2. 51 nod 1427 文明 (并查集 + 树的直径)

    1427 文明 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 安德鲁在玩一个叫"文明"的游戏.大妈正在 ...

  3. 834. 树中距离之和

    834. 树中距离之和 解法一:超时的暴力解法 #include <iostream> #include <vector> #include <string> #i ...

  4. 树的距离(牛客网树上主席树+dfs序)

    链接:https://ac.nowcoder.com/acm/problem/14415 来源:牛客网 题目描述 wyf非常喜欢树.一棵有根数树上有N个节点,1号点是他的根,每条边都有一个距离,而wy ...

  5. 834 树中距离之和

    这道题我自己的想法只有对每个点都用一遍Dijkstra然后再求和,显然会超时,所以我都没有尝试. 研究了一下题解,发现题解很巧妙,自己对树的处理还是太稚嫩,之前树链剖分学的都忘光了. 对于固定根节点的 ...

  6. leetcode 834. 树中距离之和(dp)

    给定一个无向.连通的树.树中有 N 个标记为 0...N-1 的节点以及 N-1 条边 .第 i 条边连接节点 edges[i][0] 和 edges[i][1] .返回一个表示节点 i 与其他所有节 ...

  7. LeetCode 834. 树中距离之和(树上DP)*

    文章目录 1. 题目 2. 解题 1. 题目 给定一个无向.连通的树.树中有 N 个标记为 0...N-1 的节点以及 N-1 条边 . 第 i 条边连接节点 edges[i][0] 和 edges[ ...

  8. [牛客网#35D 树的距离]离散化+线段树合并

    [牛客网#35D 树的距离]离散化+线段树合并 分类:Data Structure SegMent Tree Merge 1. 题目链接 [牛客网#35D 树的距离] 2. 题意描述 wyf非常喜欢树 ...

  9. 利用最小二乘法,用直线拟合点时,为什么计算竖直距离而非垂直距离?为什么在线性回归分析中,求的是距离平方和最小,而不是距离之和最小?

    我的理解是,直接求距离之和可能导致多个解存在的情况,而求距离平方和可以保证唯一解,参考: 当且仅当a=b时,不等式等号成立 参考文章:利用最小二乘法,用直线拟合5点时,为什么计算竖直距离而非垂直距离?

最新文章

  1. WinAPI: GetLocalTime、SetLocalTime、SetSystemTime - 获取与设置系统时间
  2. aDev第13期#个性化推荐技术#总结(Part III, Final: 稳国柱@豆瓣)
  3. 五分钟快速理解 Reactor 模型
  4. ORA-12154: TNS:could not resolve the connect identifier specified. Solved.
  5. Spring3 + JPA2 + Java EE6 App Server =配置混乱
  6. python图像分割算法_OpenCV-Python 图像分割与Watershed算法 | 三十四
  7. leetcode刷题日记-喧闹和富有
  8. 批量修改已下载的图片格式
  9. ATmega328芯片-“变身”-温度计-,附示例教程
  10. Effective java学习笔记
  11. 正在开启,一名金融猎头的二十年 | 专访伯乐百万金融顾问 Leslie Xu
  12. Android MVP伴侣,Nucleus框架使用简介
  13. Xilinx HydraMini试玩教程
  14. 推荐 :教你用神经网络求解高级数学方程!
  15. 周转时间,平均周转时间,带权周转时间
  16. 最新计算机cpu简介,计算机cpu的类型是什么?计算机CPU分类简介
  17. 矩阵连乘c语言实验报告,2013矩阵连乘实验报告.docx
  18. HBU训练营【动态规划DP】——兔子跳楼梯 (20分)
  19. excel连接mysql_Excel连接MySQL数据库的方法总结(备查,但暂时用不上)
  20. 学员答疑 | 投影后计算面积仍然是0?

热门文章

  1. Android系列---JSON数据解析
  2. 返回行javascript比较时间大小
  3. 【Java】关于Java编程软件idea快捷键的使用
  4. java.lang.Math类的API介绍
  5. centos7下docker设置阿里云镜像(自定义阿里云镜像)
  6. 软件测试Bug管理规范
  7. ECMAScript:客户端脚本语言的标准
  8. 03-19 分布式测试-Selenium Grid
  9. Web前端新手必看的7种技术,从菜鸟到高级开发的蜕变!
  10. 2021年怎么自学前端?