题目大意:给出一棵树。求两点间的最长距离。

思路:裸地树的直径。两次BFS,第一次随便找一个点宽搜。然后用上次宽搜时最远的点在宽搜。得到的最长距离就是树的直径。

CODE:

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAX 80010
using namespace std; int points,edges;
int head[MAX],total;
int next[MAX],aim[MAX],length[MAX]; int f[MAX]; char s[10]; inline void Add(int x,int y,int len);
inline void BFS(int start); int main()
{
cin >> points >> edges;
for(int x,y,len,i = 1;i <= edges; ++i) {
scanf("%d%d%d%s",&x,&y,&len,s);
Add(x,y,len),Add(y,x,len);
}
BFS(1);
int _max = 0;
for(int i = 1;i <= points; ++i)
if(f[i] > f[_max])
_max = i;
BFS(_max);
int ans = 0;
for(int i = 1;i <= points; ++i)
if(f[i] > ans)
ans = f[i];
cout << ans << endl;
return 0;
} inline void Add(int x,int y,int len)
{
next[++total] = head[x];
aim[total] = y;
length[total] = len;
head[x] = total;
} inline void BFS(int start)
{
static queue<int> q;
while(!q.empty()) q.pop();
memset(f,0x3f,sizeof(f));
f[0] = f[start] = 0;
q.push(start);
while(!q.empty()) {
int x = q.front(); q.pop();
for(int i = head[x];i;i = next[i])
if(f[aim[i]] > f[x] + length[i]) {
f[aim[i]] = f[x] + length[i];
q.push(aim[i]);
}
}
}

最新文章

  1. 国内优秀npm镜像推荐及使用
  2. MySql 创建表 插入数据!
  3. Asp.net MVC 示例
  4. MyBatis入门学习教程-MyBatis快速入门
  5. C++11中的Lambda表达式
  6. 【J2EE】Java连接SQL Server 2000问题:“com.microsoft.sqlserver.jdbc.SQLServerException:用户&#39;sa&#39;登录失败。该用户与可信SQL Server连接无关联”
  7. QA在网站建设中的作用
  8. javax.naming.NameNotFoundException
  9. 【C++】GacLib——ListView.ViewSwitching
  10. javacript序列化表单数据
  11. sgu 105 Div 3
  12. java环境变量和tomcat环境变量配置
  13. javaweb-1-B/S初论
  14. 【jQuery】(6)---jQuery validate插件
  15. JavaScript 对象属性底层原理
  16. BAT,你好!字幕组,再见!——也许要跟美剧说再见了~
  17. elastix php session保存地点
  18. javascript定时保存表单数据的代码
  19. MySQL 存储过程入门
  20. WPF设置ListBoxItem失去焦点时的背景色

热门文章

  1. cdev结构体
  2. 组队赛Day1第一场 GYM 101350A - Sherlock Bones (DP)
  3. failed to execute goal org.apache.maven.plugins:maven-archetype-plugin错误解决方法
  4. Android开发——ThreadLocal功能介绍
  5. c#中的String方法
  6. hadoop学习爬坑记录
  7. HTML5教程之本地存储SessionStorage
  8. appium之toast处理
  9. swift final关键字、?、!可选与非可选符
  10. mongodb权限机制以及扩展