当前位置:网站首页>P3304 [sdoi2013] diameter (diameter of tree)
P3304 [sdoi2013] diameter (diameter of tree)
2022-07-05 00:05:00 【eva_ can(not)survive】
[SDOI2013] The diameter of - Luogu https://www.luogu.com.cn/problem/P3304 Run first on this topic dfs Find any diameter , And record the path and the endpoints at both ends , First enumerate each point on the diameter starting from the left end point , Record the maximum path value of other paths at this point ( A road with a different diameter ), Then start to find out whether these maximum path values are equal to the original one ( It's equivalent to whether the forked road is as long as the original ), Then find the point , Then judge the distance from the right endpoint from this point ( Same as above )

The painting is very abstract , I hope it will help you understand
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <set>
#include <cmath>
#include <map>
#include <bitset>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int MN = 65005;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
#define IOS ios::sync_with_stdio(false)
#define lowbit(x) ((x)&(-x))
using P = pair<int, int>;
int n;
int ver[MAXN];
int head[MAXN];
int nxt[MAXN];
ll cost[MAXN];
int last[MAXN];
int nxxt[MAXN];
ll dis[MAXN], mmm[MAXN], op;
bool vis[MAXN];
int u, v;
int cnt;
void add(int x, int y, ll c) {
ver[++cnt] = y;
cost[cnt] = c;
nxt[cnt] = head[x];
head[x] = cnt;
}
void dfs1(int o, ll p, int q) {
if (p > op)
op = p, u = o;
for (int i = head[o]; i; i = nxt[i]) {
if (ver[i] == q)
continue;
dfs1(ver[i], p + cost[i], o);
}
}
void dfs2(int o, ll p, int q) {
last[o] = q;
dis[o] = p;
if (p > op)
op = p, v = o;
for (int i = head[o]; i; i = nxt[i]) {
if (ver[i] == q)
continue;
dfs2(ver[i], p + cost[i], o);
}
}
void dfs(int o, ll p, int q) {
if (p > op)
op = p;
for (int i = head[o]; i; i = nxt[i]) {
if (vis[ver[i]] || ver[i] == q)
continue;
dfs(ver[i], p + cost[i], o);
}
}
int main() {
scanf("%d", &n);
int x, y;
ll c;
for (int i = 1; i <= n - 1; i++) {
scanf("%d %d %lld", &x, &y, &c);
add(x, y, c);
add(y, x, c);
}
dfs1(1, 0, 0);
op = 0;
dfs2(u, 0, 0);
ll distance = dis[v];
printf("%lld\n", distance);
for (int i = v; i; i = last[i]) {
vis[i] = 1;
}
for (int i = v; i; i = last[i]) {
op = 0;
dfs(i, 0, 0);
mmm[i] = op;
}
for (int i = last[v], j = v; i; i = last[i]) {
nxxt[i] = j, j = i;
}
int tmp;
for (int i = u; i; i = nxxt[i]) {
if (dis[v] - dis[i] == mmm[i]) {
tmp = i;
break;
}
}
int ans = 0;
for (int i = tmp; i; i = last[i]) {
if (dis[i] == mmm[i])
break;
ans++;
}
printf("%d\n", ans);
return 0;
}边栏推荐
- OpenHarmony资源管理详解
- 如何用快解析自制IoT云平台
- Chinese verification of JS regular expressions (turn)
- 雅思考试流程、需要具体注意些什么、怎么复习?
- Combien de temps faut - il pour obtenir un certificat PMP?
- 人脸识别5- insight-face-paddle-代码实战笔记
- How to save your code works quickly to better protect your labor achievements
- Parsing of XML
- S32 design studio for arm 2.2 quick start
- 多回路仪表在基站“转改直”方面的应用
猜你喜欢
![[论文阅读] TUN-Det: A Novel Network for Thyroid Ultrasound Nodule Detection](/img/25/e2366cabf00e55664d16455a6049e0.png)
[论文阅读] TUN-Det: A Novel Network for Thyroid Ultrasound Nodule Detection

How to avoid arc generation—— Aafd fault arc detector solves the problem for you

uniapp 除了数字,其他输入无效

"Xiaodeng" domain password policy enhancer in operation and maintenance

Réseau graphique: Qu'est - ce que le Protocole d'équilibrage de charge de passerelle glbp?

机器人强化学习——Learning Synergies between Pushing and Grasping with Self-supervised DRL (2018)

基于三维gis平台的消防系统运用

如何在外地外网电脑远程公司项目?

用快解析内网穿透实现零成本自建网站

A new method for analyzing the trend chart of London Silver
随机推荐
基于三维gis平台的消防系统运用
PMP证书续证流程
巩固表达式C# 案例简单变量运算
After Microsoft disables the IE browser, open the IE browser to flash back the solution
[ODX studio edit PDX] -0.3- how to delete / modify inherited elements in variant variants
Jar批量管理小工具
OSEK standard ISO_ 17356 summary introduction
图解网络:什么是网关负载均衡协议GLBP?
Acrel-EMS综合能效平台在校园建设的意义
人生无常,大肠包小肠, 这次真的可以回家看媳妇去了。。。
Five papers recommended for the new development of convolutional neural network in deep learning
What is the difference between port mapping and port forwarding
快解析——好用的内网安全软件
认识ThreadPoolExecutor
Robot reinforcement learning synergies between pushing and grassing with self supervised DRL (2018)
S32 design studio for arm 2.2 quick start
Continuous modification of business scenario functions
Parsing of XML
跨域请求
【雅思阅读】王希伟阅读P4(matching1)