POJ 1985 - 树的直径
2024-10-20 07:47:31
题目大意
给一颗n个点的树,求树的直径(最长的一条链)
题解
先随便找一个点u,dfs出离它最远的点v
于是有以下情况:
- 直径就是这条链
- 直径经过u,是这条链的延长
- 直径不经过u
只需要从v再进行一边dfs,便可以求出直径。
code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
int n, m;
int adj[50005], nxt[100005], go[100005], len[100005], ecnt;
long long dist[50005];
inline void addEdge(int u, int v, int w){
nxt[++ecnt] = adj[u], adj[u] = ecnt, go[ecnt] = v, len[ecnt] = w;
nxt[++ecnt] = adj[v], adj[v] = ecnt, go[ecnt] = u, len[ecnt] = w;
}
inline void dfs(int u, int f){
for(int e = adj[u]; e; e = nxt[e]){
int v = go[e];
if(v == f) continue;
dist[v] = dist[u] + len[e];
dfs(v, u);
}
}
int main(){
freopen("h.in", "r", stdin);
while(~scanf("%d%d", &n, &m)){
ecnt = 0;
memset(adj, 0, sizeof adj);
for(int i = 1; i <= m; i++){
int u, v, w; char ch;
scanf("%d %d %d %c", &u, &v, &w, &ch);
addEdge(u, v, w);
}
int v; long long ret = 0;
dist[1] = 0;
dfs(1, 0);
for(int i = 1; i <= n; i++)
if(ret < dist[i]) ret = dist[i], v = i;
dist[v] = ret = 0;
dfs(v, 0);
for(int i = 1; i <= n; i++)
if(ret < dist[i]) ret = dist[i], v = i;
printf("%lld\n", ret);
}
}
最新文章
- Elasticsearch mysql 增量同步
- 学完了js的知识,一起分享总结知识点
- Mybatis框架_part1
- spring(三)----大概是最简单的面向切面了
- [转载]ubuntu Atheros Communications Device 1083 驱动
- Dynamips做CCNA的实验,说是找不到telnet的解决方案
- Dijkstra算法and Floyd算法 HDU 1874 畅通工程续
- apache访问控制设置
- C++教材
- QT第一天学习
- 阿里云服务器 发送邮箱 STMP 25端口 465端口问题 Javamail 25被禁用
- 数据库-PLSQL登录oracle数据库卡死(未响应)解决方法
- 【数据表格】datatable+SpringMVC+Spring Data JPA
- UltralEdit 替换回车换行符
- Python——dict(自定义类作key)
- redmine添加自定义问题状态
- vitas高音
- HDUOJ-----2838Cow Sorting(组合树状数组)
- 计算机通信协议之OSI参考模型
- 每日英语:Is It Possible To Reason About Having A Child?
热门文章
- 洛谷 P1644 跳马问题
- [Angular] HttpParams
- 【Codeforces Round #445 (Div. 2) B】Vlad and Cafes
- 【hdu 6214】Smallest Minimum Cut
- 从Unreal Engine 3到Unreal Engine 4
- js实现科学计算机
- Redis学习笔记--String(四)
- 【BZOJ 2754】[SCOI2012]喵星球上的点名
- js模仿块级作用域(js没有块级作用域私有作用域)
- <;p>;<;span style=";font-size:14px";>;近期须要批量将PNM&;#26684;式的文件转换成GIF文件。我尝试了例如以下的图像转换工具:<;/span>;<;/p>;