poj1985 / poj2631(树的直径)
2024-08-31 01:51:27
树的直径裸题
树的直径的一般求法:
任意一点为起点,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 ;
}
最新文章
- select 函数1
- C#中的属性太邪恶了
- 3.2---最小栈(CC150)
- JSTL标签库中<;c:choose>;<;/c:choose>;不能放JSP页面<;!-- -->;注释
- tomcat设置内存大小
- 检测Insert、Capslock、NumLock、ScrollLock状态键的状态
- poj 3415 Common Substrings 后缀数组+单调栈
- easyui源码翻译1.32--Tabs(选项卡)
- Objective-c单例模式详解
- python的import与from...import的不同之处
- CELL_PHOTO_IDENTIFIER
- python-查询员工信息表
- C#识别图片上的数字
- 第四弹:overfeat
- Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
- eclipse中将项目打包成jar的两种方法,及其问题与解决方法
- IP地址分类(A类 B类 C类 D类 E类)
- django面试八
- MacOS 如何剪切文件
- Vcenter一次性将服务器四个网卡从端口组迁移到分布式交换机的方法
热门文章
- @synthesize obj=_obj的意义详解 @property和@synthesize
- 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)
- 从TCP三次握手说起--浅析TCP协议中的疑难杂症(1)
- 【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分
- 最舒适的路(并查集+枚举)(hdu1598)
- 解决pip install 安装慢问题
- yii2.0 如何按需加载并管理CSS样式及JS脚本
- TC/IP协议簇
- talib 中文文档(八): Momentum Indicator Functions 动量指标
- Flink简介及使用