P1395 会议[链式前向星板](树的最小重心点+所有点到重心距离的和)
题目描述
有一个村庄居住着 n 个村民,有 n−1 条路径使得这 n 个村民的家联通,每条路径的长度都为 1。现在村长希望在某个村民家中召开一场会议,村长希望所有村民到会议地点的距离之和最小,那么村长应该要把会议地点设置在哪个村民的家中,并且这个距离总和最小是多少?若有多个节点都满足条件,则选择节点编号最小的那个点。
输入格式
第一行,一个数 n,表示有 n 个村民。
接下来 n−1 行,每行两个数字 a 和 b,表示村民 a 的家和村民 b 的家之间存在一条路径。
输出格式
一行输出两个数字 x 和 y。
x 表示村长将会在哪个村民家中举办会议。
y 表示距离之和的最小值。
输入输出样例
输入 #1
4 1 2 2 3 3 4输出 #1
2 4说明/提示
数据范围
对于 70% 数据 n≤1e3。
对于 100 数据 n≤5e4。
板题 ,所以直接上代码了
下面代码可以直接当板子使用 (:
ps:求 所有点到重心距离的和 也可以用bfs得到答案
AC代码如下:
//树的最小重心点+所有点到重心距离的和
//链式前向星板
#include <bits/stdc++.h>using namespace std;
const int maxn = 5e4 + 1;
int n, ans, a, b, sum, d[maxn], dis[maxn];
int inf = 1e9;
vector<int> g[maxn];
queue<int> q;
bool vis[maxn];void dfs(int s, int f)
{d[s] = 1;int res = 0;for (int i = 0; i < g[s].size(); i++){if (g[s][i] == f)//跑到直接的父亲continue;dfs(g[s][i], s);d[s] += d[g[s][i]];res = max(res, d[g[s][i]]);}res = max(res, n - d[s]);if (res < inf || (res == inf && ans > s)){inf = res;ans = s;}
}int main()
{ios::sync_with_stdio(0);cin >> n;for (int i = 0; i < n - 1; i++){cin >> a >> b;g[a].push_back(b);g[b].push_back(a);}dfs(1, 0);q.push(ans);while (!q.empty()){int e = q.front();q.pop();vis[e] = true;sum += dis[e];for (int i = 0; i < g[e].size(); i++){if (!vis[g[e][i]]){q.push(g[e][i]);dis[g[e][i]] = dis[e] + 1;}}}printf("%d %d", ans, sum);return 0;
}
P1395 会议[链式前向星板](树的最小重心点+所有点到重心距离的和)相关推荐
- 【数据结构】链表(含链式前向星)
链表为什么断不了?是拿振金做的吗? 说了队列,说了栈,无论什么数据结构都离不开只能按一定顺序储存的结果,向特定位置加入某值的复杂度达不到O(1)O(1)O(1).天空一声巨响,链表闪亮登场 链 ...
- Balkan2007]Toponyms[链式前向星建字典树+getchar()读入优化]
思路容易想,卡空间和时间就吐了 用链式前向星压缩空间,用getchar()一位一位读加快读入 #include <iostream> #include <cstdio> #in ...
- P3366 【模板】最小生成树(链式前向星,prim,有坑)难度⭐⭐
题目链接 输入: 4 5 1 2 2 1 3 2 1 4 3 2 3 4 3 4 3 输出: 7 链式前向星相比于矩阵,遍历的代码更加复杂一点,但是省空间,这道题用矩阵存就MLE,只能用链式前向星存. ...
- P1155 双栈排序(二分图的染色判断+链式前向星)
P1155 双栈排序 让字典序最小,当然尽量进S1 那什么时候必须进S2呢? a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i<j<k且a[k]<a[i]<a[j] 因 ...
- 邻接表存储(链式前向星)
细节 链式前向星: head[i] 存储顶点i当前出边的编号 to[num] 存储当前出边的终点 w[num] 存储当前出边的权值 next[num] 存储上一条从顶点i出发的边的边号 N个顶点对应N ...
- 可持久化链表(链式前向星)
http://codeforces.com/group/aUVPeyEnI2/contest/229670 1 /******************************************* ...
- 链式前向星模板 建图+dfs+bfs+dijkstra
边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...
- 图的存储 邻接矩阵+邻接表+链式前向星
图的存储 - 邻接矩阵 在树的问题中,邻接矩阵是空间.时间的极大浪费. 假设树的结点个数为 N = 100000. 建立邻接矩阵需要空间为 1e5*1e5 但是由于只有 N - 1 条边,所以在邻接矩 ...
- 图的储存方式,链式前向星最简单实现方式 (边集数组)
对于图来说,储存方式无非就是邻接矩阵.邻接表,今天看了看链式前向星的储存方式,说来说去不还是链表,是一种链表的简单的实现方式,还是比较好理解的.看他们写个结构体,个人不喜欢,没必要,也嫌麻烦,换一种更 ...
最新文章
- META Header
- A - Wireless Network POJ - 2236
- Oculus和虚拟现实的无限可能
- javascript运行过程中的“预编译阶段”和“执行阶段”
- linux怎么调用静态库,Linux 静态库的创建和使用
- 1050 循环数组最大子段和
- Hive的列分隔符和行分隔符
- CString原理介绍
- 游戏化设计:平台用户激励系统——互联网平台建设...
- 序列化:protobuf原理
- python实现列表的排列和组合
- python数据集_在Python中如何差分时间序列数据集
- 2017iOS开发最新的打包测试步骤(亲测)
- Redis的数据类型(对象)
- 过程FMEA步骤四:失效分析(一)
- windows xp 自动关机命令
- python开平方计算(求平方根)
- supersu二进制更新安装失败_supersu二进制更新失败怎么办 supersu二进制更新失败解决方法...
- 解决或者设置网页变灰-CSS-filter属性-哀悼
- 2023四省联考 数学 题解
热门文章
- C语言,利用递归调用函数求年龄问题 问题描述:有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁。问第4个人多少岁,他说比第3那个人大2岁。问第3个人多少岁,他说比第2个人大2岁。求5人年龄
- Springboot Freemarker 将模板放在jar包外面
- java UDP 使用示例
- Vue 调试工具 vue-devtools 安装及使用
- 【网站】给网站添加一个夜间模式切换按钮
- mysql 不显示消息错误_如何编写不吸的错误消息
- reddit_Reddit如何大规模构建功能:采访其工程副总裁
- wxml代码支持js代码吗_如何取胜:代码支持者的建议
- PAT:组个最小数(C++)
- 导出Oracle数据库字典