Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 1126  Solved: 567
[Submit][Status][Discuss]

Description

Input

第一行是两个整数N(3  N  200000)和M,分别表示居住点总数和街道总数。以下M行,每行给出一条街道的信息。第i+1行包含整数Ui、Vi、Ti(1Ui, Vi  N,1  Ti  1000000000),表示街道i连接居住点Ui和Vi,并且经过街道i需花费Ti分钟。街道信息不会重复给出。

Output

仅包含整数T,即最坏情况下Chris的父母需要花费T分钟才能找到Chris。

Sample Input

4 3
1 2 1
2 3 1
3 4 1

Sample Output

4

HINT

Source

这题比较naive吧。。

不过我一开始以为C是给出的。

很显然$AB$一定是树的直径。

敲完了才发现C是不固定的以为自己白写了。

但实际上只需要求出直径的端点到每个点的距离,然后在小的里面取最大就好了

#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
#include<map>
#include<cmath>
#include<queue>
#define int long long
using namespace std;
const int INF = 1e9 + 10, MAXN = 1e6 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, M;
struct Edge {int u, v, w, nxt;
}E[MAXN];
int head[MAXN], num = 1;
inline void AddEdge(int x, int y, int z) {E[num] = (Edge) {x, y, z, head[x]};head[x] = num++;
}
int dis[MAXN], mx, mxdis;
void dfs(int x, int fa) {for(int i = head[x]; i != -1; i = E[i].nxt) {if(E[i].v == fa) continue;dis[E[i].v] = dis[x] + E[i].w;dfs(E[i].v, x);if(dis[E[i].v] > mxdis) mxdis = dis[E[i].v], mx = E[i].v;}
}
int Node1, Node2, dis1[MAXN], dis2[MAXN];
int GetAns() {memset(dis, 0, sizeof(dis)); dfs(Node1, 0);for(int i = 1; i <= N; i++) dis1[i] = dis[i];memset(dis, 0, sizeof(dis)); dfs(Node2, 0);for(int i = 1; i <= N; i++) dis2[i] = dis[i];int rt = 0;for(int i = 1; i <= N; i++)rt = max(rt, min(dis1[i], dis2[i]));return rt;
}
main() {
#ifdef WIN32freopen("a.in", "r", stdin);
#endifmemset(head, -1, sizeof(head));N = read(); M = read();for(int i = 1; i <= M; i++) {int x = read(), y = read(), z = read();AddEdge(x, y, z);AddEdge(y, x, z);}dfs(1, 0); Node1 = mx;memset(dis, 0, sizeof(dis)); mxdis = 0;dfs(mx, 0); Node2 = mx;int ans = dis[mx];printf("%I64d", ans + GetAns());
}

BZOJ1509: [NOI2003]逃学的小孩(树的直径)相关推荐

  1. P4408 [NOI2003] 逃学的小孩(树的直径)

    [NOI2003] 逃学的小孩 - 洛谷https://www.luogu.com.cn/problem/P4408一道学习树的直径的好题. 题目要求最长的时间,说明答案应该是树的直径+max(起点离 ...

  2. [BZOJ1509][NOI2003]逃学的小孩

    1509: [NOI2003]逃学的小孩 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 968  Solved: 489 [Submit][Status ...

  3. BZOJ1509: [NOI2003]逃学的小孩

    [传送门:BZOJ1509] 简要题意: 给你一棵有n个点树 找出三个点x,y,z 求从一个点x出发,先到另外两个点中距离x较近的点,再到剩下的那个点的时间 题解: 我们不妨先假设从x出发,先到y,再 ...

  4. 【luogu4408】 [NOI2003]逃学的小孩 [动态规划 树的直径]

    P4408 [NOI2003]逃学的小孩 就是求一个树的直径 然后再在这个路径中找一点 emmmmmm大概那个意思 就这样吧emmmm 详见代码 1 #include<iostream> ...

  5. 洛谷 P4408 [NOI2003] 逃学的小孩(树的直径)

    [NOI2003] 逃学的小孩 题目描述 Chris 家的电话铃响起了,里面传出了 Chris 的老师焦急的声音:"喂,是 Chris 的家长吗?你们的孩子又没来上课,不想参加考试了吗?&q ...

  6. luogu P4408 [NOI2003]逃学的小孩(树的直径)

    整理的算法模板合集: ACM模板 看了半天的题原来没有告诉你三个点的坐标,不然直接跑最短路即可.要求最长的时间,所以我们要自己找到三个点,而在树中最长的路径也就是树的直径.那么本题就可以简化为:在一棵 ...

  7. luogu P4408 [NOI2003]逃学的小孩

    题面传送门 显然最长的一条是树的直径. 那么找到树的直径后另一条枚举点然后跑spfaspfaspfa即可. 代码实现: #include<cstdio> #include<queue ...

  8. 洛谷P4408 [NOI2003]逃学的小孩

    链接 https://www.luogu.org/problem/show?pid=4408 大意 求 max{dis[A][B]+min(dis[B][C],dis[A][C])}max\{dis[ ...

  9. P4408 [NOI2003] 逃学的小孩 题解

    目录 贪心及其证明 C++C++C++ 实现 ::: 贪心及其证明 设 A,BA,BA,B 为树直径的端点 ,,, Distx,yDist_{x,y}Distx,y​ 为树上两点的距离 ,,, 则答案 ...

最新文章

  1. python微信自动机器人
  2. 对话中国经济和信息化-万祥军:李玉庭制造企业重整电商
  3. python硬件测试开发_用python实现高性能测试工具(一)
  4. 全概公式和贝叶斯公式的理解
  5. The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.
  6. 基于PyTorch的CV框架,北大学生出品TorchCV
  7. oracle事件号,oracle8管理员账号密码Oracle-等待事件解读
  8. 十四、w、vmstat、top、sar命令
  9. 你是如何看待 ‘裸辞’ 这件事的?
  10. EPC901安装XP
  11. 华成英-模拟电子技术P8 放大电路的分析方法 讨论题目
  12. 3dmax如何快速查找丢失贴图,并根据贴图快速找到对应物体
  13. java tfidf_Hanlp分词实例:Java实现TFIDF算法
  14. python毕业设计总结范文大全_毕业设计心得体会范文3篇
  15. 纸的大小图解_纸张的尺寸标准
  16. Android N 分屏适配
  17. aws lambda_借助AWS Elastic Beanstalk轻松进行Spring Boot部署
  18. python自动化测试培训脱产_柠檬班python自动化测试课程完整版
  19. 计算机可靠度计算公式,可靠性计算公式大全
  20. 北邮智能车仿真培训(七)—— 使用c++编写程序

热门文章

  1. linux 写结构体到文件
  2. mysql 判断字段为null表示 false 其它为true_日拱一卒,MySQL数据库 常用SQL优化技巧 十一式...
  3. 纸板怎么切割光滑_激光切割机大PK!光纤、CO2、YAG,你选谁?!
  4. Spring MVC 验证码
  5. ubuntu18 激活 pycharm
  6. css 菜单栏悬停_在CSS中构建悬停菜单
  7. 迈入现代 Web 开发(GMTC 2021 演讲全文)
  8. Linux之tomcat日志管理
  9. Linux下java -version版本不对
  10. TFS 2012研发管理能力(9)