链接

https://www.luogu.org/problem/show?pid=4408


大意


max{dis[A][B]+min(dis[B][C],dis[A][C])}max\{dis[A][B]+min(dis[B][C],dis[A][C])\}max{dis[A][B]+min(dis[B][C],dis[A][C])}


思路

max{dis[A][B]}max\{dis[A][B]\}max{dis[A][B]}这个用树的直径
min(dis[B][C],dis[A][C])min(dis[B][C],dis[A][C])min(dis[B][C],dis[A][C])这个暴力


代码

#include<cstdio>
#include<cctype>
#include<algorithm>
#define ri register int
using namespace std;int n,m,l[200001],p,q,tot,pr[200001];
struct node{int next,to,w;}e[400001];
inline void add(ri u,ri v,ri w){e[++tot]=(node){l[u],v,w};l[u]=tot;return;}
long long Ans,ans,dis[200001],f[200001];
inline char Getchar()
{static char buf[100000],*p1=buf+100000,*pend=buf+100000;if(p1==pend){p1=buf; pend=buf+fread(buf,1,100000,stdin);if (pend==p1) return -1;}return *p1++;
}
inline long long read()
{char c;int d=1;long long f=0;while(c=Getchar(),!isdigit(c))if(c==45)d=-1;f=(f<<3)+(f<<1)+c-48;while(c=Getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
inline void write(register long long x)
{if(x<0)write(45),x=-x;if(x>9)write(x/10);putchar(x%10+48);return;
}
inline void dp(ri x,ri fa)//求树的直径
{for(ri i=l[x];i;i=e[i].next){int y=e[i].to;if(y==fa) continue;dp(y,x);if(f[x]+f[y]+e[i].w>ans){ans=f[x]+f[y]+e[i].w;p=pr[x];q=pr[y];//保存}if(f[y]+e[i].w>f[x]){f[x]=f[y]+e[i].w;pr[x]=pr[y];//连接}}
}
inline void dfs(ri x,ri fa,long long s)//暴力求距离
{dis[x]=min(s,dis[x]);for(ri i=l[x];i;i=e[i].next){int y=e[i].to;if(y==fa) continue;dfs(y,x,s+e[i].w);}
}
signed main()
{n=read();m=read();for(ri i=1;i<=n;i++) pr[i]=i,dis[i]=1e18;for(ri i=1,x,y,w;i<=m;i++) x=read(),y=read(),w=read(),add(x,y,w),add(y,x,w);dp(1,0);dfs(p,0,0);dfs(q,0,0);for(ri i=1;i<=n;i++) Ans=max(Ans,dis[i]);write(Ans+ans);
}

洛谷P4408 [NOI2003]逃学的小孩相关推荐

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

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

  2. 【洛谷P4408】逃学的小孩【树的直径】

    题目大意: 题目链接:https://www.luogu.org/problemnew/show/P4408 给出一棵树,已知有人一开始在CCC点,要到达AAA点和BBB点(那个近先去哪).求最坏的情 ...

  3. 【洛谷 P4408】逃学的小孩【树的直径】

    知识点:树的直径 解题思路 题目中"可以保证,任两个居住点间有且仅有一条通路"说明输入数据是一棵树.显然最优解需要从C先跑到A在跑到B.或者从C先跑到B在跑到A. 假设我们已经确定 ...

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

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

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

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

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

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

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

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

  8. 洛谷 P4408 逃学的小孩 解题报告

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

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

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

最新文章

  1. 【Pandas库】(6) 索引操作--改、查、高级索引
  2. BCH应无惧11月,奋力求发展
  3. python用于什么-Python用于哪些领域
  4. 读《编程之道》-对于程序员的抽象描述
  5. fpga经典设计100例_“100例”—优秀产品设计曲线细节美图
  6. Arria10_emif
  7. 字体编辑器_FontLab 7 ——字体编辑器
  8. 电力企业信息化系统之调度信息报送系统整体解决方案
  9. 谈谈R中的乱码(二)
  10. iptables的备份
  11. Git版本控制(完美整理版)
  12. 聚类分析软件操作流程
  13. dhtml gantt所有配置_dhtmlxGantt
  14. Udacity CH2中.bag 文件解析
  15. 计算机组装大赛活动感悟,计算机组装大赛总结参考
  16. 干货!容忍数据缺失的临床超声报告知识图谱乳腺癌诊断
  17. python 协程库_python --- 协程编程(第三方库gevent的使用)
  18. 在vue中使用Echarts的3D柱状图
  19. Vue UI插件集合(转载)
  20. RS232,RS422,RS485的区别和RS485通讯线缆注意事项

热门文章

  1. USTC科研 7.1 and 7.3 配置环境的学习
  2. 前端面试常见面试题及答案
  3. 机器人涂装工程师岗位英文缩写_公司职位及英文缩写大全
  4. 【UVM基础】TLM1.0 通信机制(port/export/imp/analysis_xxx)快速上手指南
  5. 公用Foot和友情链接模块代码模板
  6. classifier of chains
  7. vue的mounted和created方法的执行
  8. 散论陈寅恪先生《对科学院的答复》
  9. 十三、添加RD 会话主机角色
  10. C语言 键盘输入年月日,计算该年第几天