当前位置:网站首页>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;
}边栏推荐
- Some basic functions of enterprise projects are developed, and important things are saved to online first a
- go踩坑——no required module provides package : go.mod file not found in current directory or any parent
- JS how to realize array to tree
- uniapp微信小程序拿来即用的瀑布流布局demo2(方法二)(复制粘贴即可使用,无需做其他处理)
- Hong Kong Jewelry tycoon, 2.2 billion "bargain hunting" Giordano
- Tester's algorithm interview question - find mode
- Réseau graphique: Qu'est - ce que le Protocole d'équilibrage de charge de passerelle glbp?
- How to reduce the stock account Commission and stock speculation commission? Is it safe to open an online account
- Paddleocr tutorial
- OpenHarmony资源管理详解
猜你喜欢

Intelligence test to see idioms guess ancient poems wechat applet source code

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

青海省国家湿地公园功能区划数数据、全国湿地沼泽分布数据、全国省市县自然保护区

Using the uniapp rich text editor

如何报考PMP项目管理认证考试?

IELTS examination process, what to pay attention to and how to review?

Fast analysis -- easy to use intranet security software

Fast parsing intranet penetration helps enterprises quickly achieve collaborative office

45 year old professor, she threw two super unicorns

Application of multi loop instrument in base station "switching to direct"
随机推荐
French scholars: the explicability of counter attack under optimal transmission theory
【雅思阅读】王希伟阅读P3(Heading)
abc 258 G - Triangle(bitset)
In the enterprise, win10 turns on BitLocker to lock the disk, how to back up the system, how to recover when the system has problems, and how to recover quickly while taking into account system securi
图解网络:什么是网关负载均衡协议GLBP?
用快解析内网穿透实现零成本自建网站
如何将自己的代码作品快速存证,已更好的保护自己劳动成果
城市轨道交通站应急照明疏散指示系统设计
Actual combat simulation │ JWT login authentication
How to do the project of computer remote company in foreign Internet?
"Xiaodeng" domain password policy enhancer in operation and maintenance
[论文阅读] TUN-Det: A Novel Network for Thyroid Ultrasound Nodule Detection
P3304 [SDOI2013]直径(树的直径)
XML的解析
如何用快解析自制IoT云平台
如何在外地外网电脑远程公司项目?
Best practice case of enterprise digital transformation: introduction and reference of cloud based digital platform system security measures
Date time type and format in MySQL
45 year old professor, she threw two super unicorns
同事的接口文档我每次看着就头大,毛病多多。。。