3124: [Sdoi2013]直径
3124: [Sdoi2013]直径
https://www.lydsy.com/JudgeOnline/problem.php?id=3124
分析:
所有直径都经过的边,一定都是连续的一段。(画个图,反证一下)
然后可以求出一条直径后,可以对每个点求出不经过直径到达的最远的距离。
然后判断一下,找到左边分叉的最后一个,右边分叉的第一个,中间的点就是所有直径都经过的点。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for (;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ; int head[N], q[N], fa[N], nxt[N<<], to[N<<], Enum;
LL dis[N], dist[N], val[N<<], Len = , Mx = ;
int Root, Qd, Zd, tot;
bool vis[N]; inline void add_edge(int u,int v,int w) {
++Enum; to[Enum] = v; val[Enum] = w; nxt[Enum] = head[u]; head[u] = Enum;
++Enum; to[Enum] = u; val[Enum] = w; nxt[Enum] = head[v]; head[v] = Enum;
} void dfs1(int u,int pa) {
fa[u] = pa;
if (dis[u] > Len) {
Len = dis[u]; Root = u;
}
for (int i=head[u]; i; i=nxt[i]) {
int v = to[i];
if (v == pa) continue;
dis[v] = dis[u] + val[i];
dfs1(v, u);
}
} void dfs2(int u,int pa) {
vis[u] = true;
if (dist[u] > Mx) {
Mx = dist[u]; Root = u;
}
for (int i=head[u]; i; i=nxt[i]) {
int v = to[i];
if (v == pa || vis[v]) continue;
dist[v] = dist[u] + val[i];
dfs2(v, u);
}
} int main() { int n = read();
for (int i=; i<n; ++i) {
int u = read(), v = read(), w = read();
add_edge(u, v, w);
}
dfs1(, );
Len = ; Qd = Root; dis[Qd] = ;
dfs1(Root, );
Zd = Root; for (int i=Zd; i; i=fa[i]) q[++tot] = i, vis[i] = true; int L = tot, R = ;
for (int i=tot; i>=; --i) {
Mx = ;dfs2(q[i], );
if (!Mx) continue;
if (Mx == dis[q[i]]) L = i; // 保证所有直径都经过,左边分叉的最后一个
if (Len - dis[q[i]] == Mx) {R = i; break;} // 右边分叉的第一个
}
cout << Len << "\n" << L - R;
return ;
}
3124: [Sdoi2013]直径的更多相关文章
- Bzoj 3124: [Sdoi2013]直径 题解
3124: [Sdoi2013]直径 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1222 Solved: 580[Submit][Status] ...
- bzoj 3124: [Sdoi2013]直径
#include<cstdio> #include<iostream> #define M 400009 #define ll long long using namespac ...
- bzoj 3124 [Sdoi2013]直径(dfs)
Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节点,可以证明其有且仅有N-1 条边. 路径:一 ...
- bzoj千题计划134:bzoj3124: [Sdoi2013]直径
http://www.lydsy.com/JudgeOnline/problem.php?id=3124 第一问: dfs1.dfs2 dfs2中记录dis[i]表示点i距离最长链左端点的距离 第二问 ...
- bzoj3124: [Sdoi2013]直径 树形dp two points
题目链接 bzoj3124: [Sdoi2013]直径 题解 发现所有直径都经过的边 一定在一条直径上,并且是连续的 在一条直径上找这段区间的两个就好了 代码 #include<map> ...
- [洛谷P3304] [SDOI2013]直径
洛谷题目链接:[SDOI2013]直径 题目描述 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节点,可以证明其有且仅 ...
- 【BZOJ3124】[Sdoi2013]直径 树形DP(不用结论)
[BZOJ3124][Sdoi2013]直径 Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节 ...
- BZOJ_3124_[Sdoi2013]直径_树形DP
BZOJ_3124_[Sdoi2013]直径_树形DP Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵 ...
- 【bzoj3124】 Sdoi2013—直径
http://www.lydsy.com/JudgeOnline/problem.php?id=3124 (题目链接) 题意 求树的直径以及直径的交. Solution 我的想法超麻烦,经供参考..思 ...
随机推荐
- Android(java)学习笔记53:局部内部类
1. 局部内部类 /* 局部内部类 A:可以直接访问外部类的成员 B:在局部位置,可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能 面试题: 局部内部类访问局部变量的注意事项? A:局 ...
- 异常:org.hibernate.id.IdentifierGenerationException
在有关联关系的数据表中保存数据时,先保存一端,再保存多端的抛出的异常(此时不管一端,还是多端的对象都没有设置id,属性,也就是要保存的两个对象的id 属性为空.) org.hibernate.id.I ...
- Netbackup客户端安装网络放通端口需求,及测试网络放通方法
192.168.1.101网络放通需求如下: 客户端主机 192.168.1.101 到 服务端主机 192.168.1.100 的1556.13720.13724.1378.13782这5个 ...
- ubuntu14.04下搜狗拼音输入法不正常的解决方法
在终端输入ibus-daemon –drx命令,可以解决该问题.
- Spring ApplicationListener配合-D实现参数初始化
ApplicationListener是SpringBoot的监听器,提供了四种事件: ApplicationStartedEvent :spring boot启动开始时执行的事件 Applicati ...
- AngularJS 使用 uppercase 过滤器的表格
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- LeetCode1.两数之和 JavaScript
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 实例: 给定 nums = [2, 7, 11, 15], target ...
- webpack——概念的引入
## 在网页中会引用哪些常见的静态资源?+ JS - .js .jsx .coffee .ts(TypeScript 类 C# 语言)+ CSS - .css .less .sass .scss+ I ...
- CSS&JS定位器
一.CssSelector定位器 1.概述 CssSelector是效率很高的元素定位方法,Selenium官网的Document里极力推荐使用CSS locator,而不是XPath来定位元素,原因 ...
- SpringBoot非官方教程 | 第十篇: 用spring Restdocs创建API文档
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot10-springrestdocs/ 本文出自方志 ...