P4408 [NOI2003]逃学的小孩

就是求一个树的直径 然后再在这个路径中找一点

emmmmmm大概那个意思

就这样吧emmmm 详见代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<stack>
 7 #include<algorithm>
 8 using namespace std;
 9 #define ll long long
10 #define rg register
11 const int N=200000+5,P=9901,inf=0x3f3f3f3f;
12 int n,m,s;ll ans=0,maxl,sa,mm=0;
13 template <class t>void rd(t &x)
14 {
15     x=0;int w=0;char ch=0;
16     while(!isdigit(ch)) w|=ch=='-',ch=getchar();
17     while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
18     x=w?-x:x;
19 }
20
21 int head[N],tot=0;
22 struct edge{
23     int v,nxt;ll w;
24 }e[N<<1];
25 void add(int u,int v,ll w){
26     e[++tot].v=v,e[tot].w=w,e[tot].nxt=head[u],head[u]=tot;
27 }
28
29 ll a[N],b[N];
30 void dfs(int u,int fa,ll d[])
31 {
32 //    if(d[u]>maxl) sa=u,maxl=d[u];
33     for(rg int i=head[u];i;i=e[i].nxt)
34     {
35         int v=e[i].v,w=e[i].w;
36         if(v==fa) continue;
37         d[v]=d[u]+w;
38         if(d[v]>maxl) sa=v,maxl=d[v];
39         dfs(v,u,d);
40     }
41 }
42
43 int main()
44 {
45    // freopen("in.txt","r",stdin);
46     //freopen("nocows.out","w",stdout);
47     memset(a,0,sizeof(a));
48     rd(n),rd(m);
49     int u,v;ll w;
50     for(rg int i=1;i<=m;++i)
51     {
52         rd(u),rd(v),rd(w);
53         add(u,v,w),add(v,u,w);
54     }
55     dfs(1,0,a);maxl=0;
56     memset(a,0,sizeof(a));
57     dfs(sa,0,a);ans=maxl,maxl=0;
58     dfs(sa,0,b);
59     for(rg int i=1;i<=n;++i)
60     mm=max(mm,min(a[i],b[i]));
61     printf("%lld",mm+ans);
62     return 0;
63 }

转载于:https://www.cnblogs.com/lxyyyy/p/10845639.html

【luogu4408】 [NOI2003]逃学的小孩 [动态规划 树的直径]相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. BZOJ1509: [NOI2003]逃学的小孩(树的直径)

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

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

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

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

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

最新文章

  1. PHP新手上路(六)
  2. 浙大团队研发铜基沸石纱布口罩,1分钟杀灭新冠病毒逾99%
  3. Volatile可见性
  4. Java 8 HashMap键与Comparable接口
  5. FB宣布将回购60亿美元股票 首席会计官将离职
  6. IT行业为什么需要更多的女性?
  7. 《随机出题软件》《随机分队软件》源码(Windows API)
  8. 在GitHub里生成自己的网页
  9. Ubuntu c++调用python脚本(Anaconda)
  10. z变换与拉普拉斯变换的关系
  11. 听韩顺平聊PHP初学者如何变身大牛(一)?
  12. Java 将中文文件名称修改为拼音首字母、拼音全称(附GitHub)
  13. 东华大学(C++)OJ题目收集(代码详解版)
  14. 微信小程序JS 字符串string与arraybuffer的相互转换
  15. php代码审计靶场,RIPS --代码审计靶场(第一关)-华盟网
  16. STM32 UART/USART初始化时钟使能
  17. Altium Designer布局布线时元器件移动
  18. Dva中在effects中获取state的值
  19. 基于WebGL架构的3D可视化平台—粮仓3D场景
  20. 2022年自考专业考试(公关关系)人际关系学练习题

热门文章

  1. 面向开发者的机器学习(一)| 机器学习简介
  2. 数值计算:设计算法的若干原则
  3. C#EXCEL 操作类--C#DataToExcel帮助类
  4. 参考的datalist分页helper
  5. 网络压缩《network pruning 浅析》
  6. 数据预处理之归一化/标准化/正则化/零均值化
  7. 图像基础知识 —— Opencv图像处理
  8. 常系数线性微分方程的直接解法-利用特征方程
  9. 信号量CSemaphore的使用
  10. Spring框架 IOC