poj1985 / poj2631(树的直径)
poj1985 Cow Marathon
树的直径裸题
树的直径的一般求法:
任意一点为起点,dfs/bfs找出与它最远的点$u$
以$u$为起点,dfs/bfs找出与它最远的点$v$
则$d(u,v)$是一条直径
下面给出poj1985的code(poj2631自行修改)
#include<iostream> #include<cstdio> #include<cstring> #define re register using namespace std; int max(int &a,int &b){return a>b?a:b;} #define N 50002 int n,m,k,ans,dis[N]; int cnt,hd[N],nxt[N<<1],ed[N],poi[N<<1],val[N<<1]; void adde(int x,int y,int v){nxt[ed[x]]=++cnt; hd[x]=hd[x]?hd[x]:cnt;ed[x]=cnt; poi[cnt]=y; val[cnt]=v; } void dfs(int x,int fa){if(dis[x]>dis[k]) k=x;for(int i=hd[x];i;i=nxt[i]){int to=poi[i];if(to==fa) continue;dis[to]=dis[x]+val[i];dfs(to,x);} } int main(){char c[3]; int q1,q2,q3;while(~scanf("%d%d",&n,&m)){memset(hd,0,sizeof(hd));memset(ed,0,sizeof(ed));memset(nxt,0,sizeof(nxt));ans=cnt=k=0;for(re int i=1;i<n;++i){scanf("%d%d%d%s",&q1,&q2,&q3,c);adde(q1,q2,q3); adde(q2,q1,q3);}dis[1]=1; dfs(1,0);dis[k]=0; dfs(k,0);for(re int i=1;i<=n;++i) ans=max(ans,dis[i]);printf("%d\n",ans);}return 0; }
转载于:https://www.cnblogs.com/kafuuchino/p/9814422.html
poj1985 / poj2631(树的直径)相关推荐
- poj1985 Cow Marathon(树的直径#入门)
poj1985 Cow Marathon(树的直径) Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 9110 Accepted: ...
- poj1985和poj1849(树的直径)
题目传送门:poj1985 树是连通无环图,树上任意两点之间的路径是唯一的.定义树上任 意两点u, v的距离为u到v路径上边权的和.树的直径MN为树上最长路 径,即点M和N是树上距离最远的两个点. 题 ...
- 树的直径,树的最长路dp思想
dp一直弱死了,树型dp很多基本的题都不会,最近在刷树型dp的题,把关于树的最长路的思想总结一下: 树的直径:树中距离最远的两点间的距离. 下面说几道题: hdu 2196:对于树上(双向边)的每一个 ...
- 树的直径/重心 学习笔记
树的直径 POJ2631 Roads in the North 题意:裸的直径 题解:套模板,但是开始的时候,我的代码在第一次dfs循环的时候,没有考虑到,路长全为0的情况,而用来记录最远点的maxp ...
- C++剑指offer:[POJ]2631 Roads in the North - 用树形DP的方式求出一棵树的直径
前言 此题是道很简单的题(做法不单一,不仅只有树形DP的方法) 做完了这道题才发现此题原来是一道求树的直径的题,也就是求树上两个节点的最大距离. 题目 问题 N(2692): [POJ2631]北极地 ...
- [51nod] 1766树上的最远点对 树的直径 树剖LCA+ST表静态查询
题意: 给你一棵带权树,q次查询,每次给出两个区间,[l1,r1][l2,r2][l_1,r_1] [l_2,r_2][l1,r1][l2,r2]从这两个区间中分别选择两个数字,使得这两个点的 ...
- 小A与欧拉路(牛客-树的直径)
题解: 欧拉路:从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边只通过恰好一次 问你走完这树上所有的点最短路径是什么. 因为树是没有环的,所以你走到叶子结点的时候需要往回走,也就是再走一 ...
- luogu P4408 [NOI2003]逃学的小孩(树的直径)
整理的算法模板合集: ACM模板 看了半天的题原来没有告诉你三个点的坐标,不然直接跑最短路即可.要求最长的时间,所以我们要自己找到三个点,而在树中最长的路径也就是树的直径.那么本题就可以简化为:在一棵 ...
- 模板 - 树上问题(树的直径、动态查询树的直径、树的重心)
整理的算法模板合集: ACM模板 目录 一.树的直径 树形DP 两次DFS / BFS(找到直径的两个端点) 二.动态修改树的边权并求每个时刻的直径(线段树) 三.树的重心 一.树的直径 树的直径满足 ...
最新文章
- Pandas处理时序数据(初学者必会)!
- python将pandas dataframe内容写入ElasticSearch实战
- $portfolio.isotope is not a function
- LeetCode 52. N-Queens II
- Angular本地数据存储LocalStorage
- 『操作系统』 进程的描述与控制 Part4 线程
- RabbitMQ的深入理解和最简单的用途说明
- 受疫情影响 MWC 2020正式取消
- zw版【转发·台湾nvp系列例程】HALCON MirrorRegion (Delphi)
- 基于 Flink 的典型 ETL 场景实现方案
- 基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder
- 弱电工程师和网络工程师有什么区别?工作内容是什么?
- Nintendo Switch 解砖指引(翻译)
- PAT.1143 Lowest Common Ancestor
- 【问题解决方法】每次关闭XAMPP都会出现报错:Error:Cannot create file ‘E:\XAMPP\xampp-control.ini’
- 拓扑排序(topo_sort)
- 关于我使用校园网电脑被限速成10M宽带的悲惨教训
- 嵌入式电路中的BUCK VS LDO【转】
- 【云原生 | 01】docker容器引擎
- win11使用win10右键菜单的方法