[luoguP1364] 医院设置(树的重心)

摘要:
传送门假设数据再大些,我这就是正解,然而题解里总是各种水过。两边dfs,一遍求重心,一遍统计距离。

传送门

假设数据再大些,我这就是正解,然而题解里总是各种水过。

两边dfs,一遍求重心,一遍统计距离。

——代码

[luoguP1364] 医院设置(树的重心)第1张[luoguP1364] 医院设置(树的重心)第2张
1 #include <cstdio>
2 #include <cstring>
3 #define MAXN 1001
4 
5 using namespacestd;
6 
7 intn, cnt, tot, ans, sum;
8 inthead[MAXN], next[MAXN], to[MAXN], val[MAXN], size[MAXN], dis[MAXN], f[MAXN];
9 
10 inline void add(int x, inty)
11 {
12     to[cnt] =y;
13     next[cnt] =head[x];
14     head[x] = cnt++;
15 }
16 
17 inline void dfs(intu)
18 {
19     inti, v;
20     size[u] +=val[u];
21     for(i = head[u]; i != -1; i =next[i])
22 {
23         v =to[i];
24         if(v !=f[u])
25 {
26             f[v] =u;
27 dfs(v);
28             size[u] +=size[v];
29 }
30 }
31     if(2 * size[u] >= tot && !ans) ans =u;
32 }
33 
34 inline void dfs1(intu)
35 {
36     inti, v;
37     sum += (dis[u] - 1) *val[u];
38     for(i = head[u]; i != -1; i =next[i])
39 {
40         v =to[i];
41         if(!dis[v])
42 {
43             dis[v] = dis[u] + 1;
44 dfs1(v);
45 }
46 }
47 }
48 
49 intmain()
50 {
51     inti, x, y;
52     scanf("%d", &n);
53     memset(head, -1, sizeof(head));
54     for(i = 1; i <= n; i++)
55 {
56         scanf("%d %d %d", &val[i], &x, &y);
57         if(x) add(i, x), add(x, i);
58         if(y) add(i, y), add(y, i);
59         tot +=val[i];
60 }
61     dfs(1);
62     dis[ans] = 1;
63 dfs1(ans);
64     printf("%d", sum);
65     return 0;
66 }
View Code

免责声明:文章转载自《[luoguP1364] 医院设置(树的重心)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS用域名或主机名获取IP地址(包含C语言接口 和iOS原生)cuda8和cuda10切换 以及正确按照配置cuDNN下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于重心偏移的视差计算

视差的计算,主要要计算待匹配图像对应像素的水平偏移,那么针对一个物体而言,其在场景中的视差大体上应该是平滑的,所以可以直接针对分割出的物体计算重心的水平偏移从而得到视差值,我做了一个小实验,感觉效果还行,下面是代码和实验结果,希望各位有什么想法大家交流。 有一个问题就是,我这个视差计算出来是这个台灯是221的灰度,标准的是224的灰度。 我的流程是算出横向...

机器学习之聚类算法

(一)K-means 提到k-means不得不说的许高建老师,他似乎比较偏爱使用这种聚类方法,在N个不同场合听到他提起过,k-means通过设置重心和移动中心两个简答的步骤,就实现了数据的聚类。下面就来介绍下k-means算法。 一、   数值属性距离度量 度量数值属性相似度最简单的方法就是计算不同数值间的“距离”,如果两个数值之间“距离”比较大,就可以认为...

拉格朗日插值法(图文详解)

在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法。许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。如对实践中的某个物理量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值。这样的多项式称为拉格朗日(插值)多项式。数...