poj1985 / poj2631(树的直径)
树的直径裸题
树的直径的一般求法:
任意一点为起点,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<<],ed[N],poi[N<<],val[N<<];
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[]; int q1,q2,q3;
while(~scanf("%d%d",&n,&m)){
memset(hd,,sizeof(hd));
memset(ed,,sizeof(ed));
memset(nxt,,sizeof(nxt));
ans=cnt=k=;
for(re int i=;i<n;++i){
scanf("%d%d%d%s",&q1,&q2,&q3,c);
adde(q1,q2,q3); adde(q2,q1,q3);
}
dis[]=; dfs(,);
dis[k]=; dfs(k,);
for(re int i=;i<=n;++i) ans=max(ans,dis[i]);
printf("%d\n",ans);
}return ;
}
poj1985 / poj2631(树的直径)的更多相关文章
- poj2631 树的直径
设s-t是这棵树的直径,那么对于任意给予的一点,它能够到达的最远的点是s或者t. 这样我们可以通过2次bfs找到树的直径了. #include<cstdio> #include<qu ...
- poj2631 树的直径 + bfs
//Accepted 492 KB 0 ms //树的直径 bfs #include <cstdio> #include <cstring> #include <iost ...
- POJ 树的直径和重心
树的直径:(无根)树上最长两点间的最长路径,两次dfs即可,第一次dfs任选一点u,找到距离它最远的点s,再从点s进行一次dfs,找到距离s最远的点t,则s-t之间的路径就是树的直径.证明: < ...
- 树的直径(两个bfs)
题目链接:https://cn.vjudge.net/problem/POJ-2631 树的直径:树中的最长链 具体思路:随便找一个点bfs,然后找到最长的链,然后再以找到的点作为起点进行bfs,然后 ...
- WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS
title: WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS date: 2020-03-20 10:43:00 categories: acm tags: [ ...
- poj1985和poj1849(树的直径)
题目传送门:poj1985 树是连通无环图,树上任意两点之间的路径是唯一的.定义树上任 意两点u, v的距离为u到v路径上边权的和.树的直径MN为树上最长路 径,即点M和N是树上距离最远的两个点. 题 ...
- poj2631 求树的直径裸题
题目链接:http://poj.org/problem?id=2631 题意:给出一棵树的两边结点以及权重,就这条路上的最长路. 思路:求实求树的直径. 这里给出树的直径的证明: 主要是利用了反证法: ...
- poj1985 Cow Marathon (求树的直径)
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 3195 Accepted: 1596 Case ...
- [USACO2004][poj1985]Cow Marathon(2次bfs求树的直径)
http://poj.org/problem?id=1985 题意:就是给你一颗树,求树的直径(即问哪两点之间的距离最长) 分析: 1.树形dp:只要考虑根节点和子节点的关系就可以了 2.两次bfs: ...
随机推荐
- cocos2dx游戏--欢欢英雄传说--添加游戏背景
经过一段时间的学习cocos2dx,接下来我想要实践开发一个小游戏,我把它命名为“欢欢英雄传说”,项目名将取为HuanHero.环境:cocos2dx环境:cocos2d-x 3.11.1IDE:Co ...
- JDK1.8在LINUX下安装步骤
JDK1.8在LINUX下安装步骤: 在/usr/lib/目录下新建jvm文件夹,如果已有jvm文件夹,则将之前的JDK版本删除,即在jvm目录下执行命令:rm –rf * 将JDK文件jdk-8u4 ...
- JS中保留小数位数
一.1.2.toFixed(2)
- Vue如何引入远程JS文件
直接在dom上操作: export default { mounted() { const s = document.createElement('script'); s.type = 'text/j ...
- POJ1125-Stockbroker Grapevine Floyd算法多源最短路径
这题的思路还是比较简单,用弗洛伊德算法打表后,枚举来找到最小值 代码如下 注意最后判断时候的语句 在这里错误了很多次 # include<iostream> # include<al ...
- JZOJ.5335【NOIP2017模拟8.24】早苗
Description
- python flask的request模块以及在flask编程中遇到的坑
一.首先来讲讲遇到的坑: 1.linux下package的打包引用: """ 路径结构如下: ./project ./bin ./api ""&quo ...
- maven项目使用SOLR时报 previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest" 错的解决方法
环境:Apache solr4.8,maven3,IntellijIDEA 想在项目中使用solr 在pom.xml文件中添加了solr的依赖 solr-core,solrj 和solr-dataim ...
- C++ 初始化函数的实现
http://www.cppblog.com/xlshcn/archive/2007/11/21/37088.aspx
- ios 在UIView上画图,线条
1.画线条(实线,虚线) - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext( ...