【luogu4408】 [NOI2003]逃学的小孩 [动态规划 树的直径]
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]逃学的小孩 [动态规划 树的直径]相关推荐
- 洛谷 P4408 [NOI2003] 逃学的小孩(树的直径)
[NOI2003] 逃学的小孩 题目描述 Chris 家的电话铃响起了,里面传出了 Chris 的老师焦急的声音:"喂,是 Chris 的家长吗?你们的孩子又没来上课,不想参加考试了吗?&q ...
- luogu P4408 [NOI2003]逃学的小孩(树的直径)
整理的算法模板合集: ACM模板 看了半天的题原来没有告诉你三个点的坐标,不然直接跑最短路即可.要求最长的时间,所以我们要自己找到三个点,而在树中最长的路径也就是树的直径.那么本题就可以简化为:在一棵 ...
- 【洛谷P4408】逃学的小孩【树的直径】
题目大意: 题目链接:https://www.luogu.org/problemnew/show/P4408 给出一棵树,已知有人一开始在CCC点,要到达AAA点和BBB点(那个近先去哪).求最坏的情 ...
- 【洛谷 P4408】逃学的小孩【树的直径】
知识点:树的直径 解题思路 题目中"可以保证,任两个居住点间有且仅有一条通路"说明输入数据是一棵树.显然最优解需要从C先跑到A在跑到B.或者从C先跑到B在跑到A. 假设我们已经确定 ...
- P4408 [NOI2003] 逃学的小孩(树的直径)
[NOI2003] 逃学的小孩 - 洛谷https://www.luogu.com.cn/problem/P4408一道学习树的直径的好题. 题目要求最长的时间,说明答案应该是树的直径+max(起点离 ...
- [BZOJ1509][NOI2003]逃学的小孩
1509: [NOI2003]逃学的小孩 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 968 Solved: 489 [Submit][Status ...
- BZOJ1509: [NOI2003]逃学的小孩(树的直径)
Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1126 Solved: 567 [Submit][Status][Discuss] Descripti ...
- BZOJ1509: [NOI2003]逃学的小孩
[传送门:BZOJ1509] 简要题意: 给你一棵有n个点树 找出三个点x,y,z 求从一个点x出发,先到另外两个点中距离x较近的点,再到剩下的那个点的时间 题解: 我们不妨先假设从x出发,先到y,再 ...
- luogu P4408 [NOI2003]逃学的小孩
题面传送门 显然最长的一条是树的直径. 那么找到树的直径后另一条枚举点然后跑spfaspfaspfa即可. 代码实现: #include<cstdio> #include<queue ...
最新文章
- PHP新手上路(六)
- 浙大团队研发铜基沸石纱布口罩,1分钟杀灭新冠病毒逾99%
- Volatile可见性
- Java 8 HashMap键与Comparable接口
- FB宣布将回购60亿美元股票 首席会计官将离职
- IT行业为什么需要更多的女性?
- 《随机出题软件》《随机分队软件》源码(Windows API)
- 在GitHub里生成自己的网页
- Ubuntu c++调用python脚本(Anaconda)
- z变换与拉普拉斯变换的关系
- 听韩顺平聊PHP初学者如何变身大牛(一)?
- Java 将中文文件名称修改为拼音首字母、拼音全称(附GitHub)
- 东华大学(C++)OJ题目收集(代码详解版)
- 微信小程序JS 字符串string与arraybuffer的相互转换
- php代码审计靶场,RIPS --代码审计靶场(第一关)-华盟网
- STM32 UART/USART初始化时钟使能
- Altium Designer布局布线时元器件移动
- Dva中在effects中获取state的值
- 基于WebGL架构的3D可视化平台—粮仓3D场景
- 2022年自考专业考试(公关关系)人际关系学练习题