[luoguP1364] 医院设置(树的重心)
假设数据再大些,我这就是正解,然而题解里总是各种水过。
两边dfs,一遍求重心,一遍统计距离。
——代码
#include <cstdio>
#include <cstring>
#define MAXN 1001 using namespace std; int n, cnt, tot, ans, sum;
int head[MAXN], next[MAXN], to[MAXN], val[MAXN], size[MAXN], dis[MAXN], f[MAXN]; inline void add(int x, int y)
{
to[cnt] = y;
next[cnt] = head[x];
head[x] = cnt++;
} inline void dfs(int u)
{
int i, v;
size[u] += val[u];
for(i = head[u]; i != -; i = next[i])
{
v = to[i];
if(v != f[u])
{
f[v] = u;
dfs(v);
size[u] += size[v];
}
}
if( * size[u] >= tot && !ans) ans = u;
} inline void dfs1(int u)
{
int i, v;
sum += (dis[u] - ) * val[u];
for(i = head[u]; i != -; i = next[i])
{
v = to[i];
if(!dis[v])
{
dis[v] = dis[u] + ;
dfs1(v);
}
}
} int main()
{
int i, x, y;
scanf("%d", &n);
memset(head, -, sizeof(head));
for(i = ; i <= n; i++)
{
scanf("%d %d %d", &val[i], &x, &y);
if(x) add(i, x), add(x, i);
if(y) add(i, y), add(y, i);
tot += val[i];
}
dfs();
dis[ans] = ;
dfs1(ans);
printf("%d", sum);
return ;
}
[luoguP1364] 医院设置(树的重心)的更多相关文章
- P1364 医院设置(树型结构)
传送门闷闷闷闷闷闷 ~~放一个可爱的输入框.~~ 考虑在O(n)的时间内求数以每个节点为医院的距离和. \(设想一下,如果我们已知以1为根节点的距离和f[1],如何求出子节点呢?\) 当医院从1转换到 ...
- 【模板】树的重心 洛谷P1364 医院设置
P1364 医院设置 题目描述 设有一棵二叉树,如图: 其中,圈中的数字表示结点中居民的人口.圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接 ...
- 【洛谷 P1364】医院设置(树的重心)
树的重心的定义: 树若以某点为根,使得该树最大子树的结点数最小,那么这个点则为该树的重心,一棵树可能有多个重心. 树的重心的性质: 1.树上所有的点到树的重心的距离之和是最短的,如果有多个重心,那么总 ...
- 洛谷P1395 会议(CODEVS.3029.设置位置)(求树的重心)
To 洛谷.1395 会议 To CODEVS.3029 设置位置 题目描述 有一个村庄居住着n个村民,有n-1条路径使得这n个村民的家联通,每条路径的长度都为1.现在村长希望在某个村民家中召开一场会 ...
- 【洛谷 P2726】 [SHOI2005]树的双中心(树的重心)
先考虑一个\(O(N^2)\)做法. 设选的两个点为\(x,y\),则一定可以将树分成两个集合\(A,B\),使得\(A\)集合所有点都去\(x\),\(B\)集合所有点都去\(y\),而这两个集合的 ...
- codevs 2577 医院设置
2577 医院设置 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 设有一棵二叉树,如下图 其中,圈中数字表示结点居民的人口.圈边 ...
- P1364 医院设置
题目描述 设有一棵二叉树,如图: 其中,圈中的数字表示结点中居民的人口.圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为l.如上 ...
- 医院设置x
医院设置x 题目描述 Description 设有一棵二叉树,如下图 其中,圈中数字表示结点居民的人口.圈边上数字表示结点编号,.现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小, ...
- 【6.10校内test】T2 医院设置
医院设置[题目链接] 感觉我超废 我是一个连floyd都不会写了的灵魂OI选手qwq(考场上写了半天spfa然后写炸了(微笑)) floyd的暴力: 1.先建树:用邻接矩阵存.存之前记得先初始化为IN ...
随机推荐
- session共享方法
session数据保存在memcached,redis这种内存数据库内 memcache比较简单,使用的场景比较多.redis支持的数据类型多.而且数据具有期限,和session和期限可以配合使用 通 ...
- P2955 [USACO09OCT]奇数偶数Even? Odd?
题目描述 Bessie's cruel second grade teacher has assigned a list of N (1 <= N <= 100) positive int ...
- canvas画饼图
<style> body { background: black; text-align: center; } #cans { background: white; } ...
- IOS颜色块设置
+ (UIImage *)imageWithColor:(UIColor *)color { CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); UIG ...
- PMP项目管理学习笔记(7)——整合管理之指导和管理项目执行过程
过程剖析 输入:组织过程资产.企业环境要素.项目管理计划.批准的变更请求 工具:专家判断.项目管理信息系统 输出:工作绩效信息.可交付成果.变更请求.项目文档和计划更新 指导和管理项目执行过程包括: ...
- SQL函数 Nullif
函数 Nullif 功能: 如果两个函数都为空字符串则返回null 语法: Nullif(参数1,参数2) 一般该函数与函数coalesc一起使用 例: coalesce ( nullif ( [参数 ...
- droplang - 删除一种 PostgreSQL 过程语言
SYNOPSIS droplang [ connection-option...] langname [ dbname] droplang [ connection-option...] --list ...
- 搜索 || DFS || POJ 2488 A Knight's Journey
给一个矩形棋盘,每次走日字,问能否不重复的走完棋盘的每个点,并将路径按字典序输出 *解法:按字典序输出路径,因此方向向量的数组按字典序写顺序,dfs+回溯,注意flag退出递归的判断,并且用pre记录 ...
- windwos .bat脚本大全
记录一个很有用比较全面的windows .bat脚本网站 https://www.cnblogs.com/zhaoqingqing/p/4620402.html
- windows定时执行python脚本
from:http://blog.csdn.net/Gpwner/article/details/77882131