当前位置:网站首页>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;
}
边栏推荐
- Tester's algorithm interview question - find mode
- Hash table, hash function, bloom filter, consistency hash
- 快解析内网穿透帮助企业快速实现协同办公
- Financial markets, asset management and investment funds
- P4281 [AHOI2008]紧急集合 / 聚会(LCA)
- 使用快解析搭建自己的minecraft服务器
- Netcore3.1 JSON web token Middleware
- 实战模拟│JWT 登录认证
- Microservice
- It's too convenient. You can complete the code release and approval by nailing it!
猜你喜欢
雅思考试流程、需要具体注意些什么、怎么复习?
How to do the project of computer remote company in foreign Internet?
P3304 [SDOI2013]直径(树的直径)
快解析——好用的内网安全软件
Réseau graphique: Qu'est - ce que le Protocole d'équilibrage de charge de passerelle glbp?
The input of uniapp is invalid except for numbers
How to avoid arc generation—— Aafd fault arc detector solves the problem for you
Fast analysis -- easy to use intranet security software
A new method for analyzing the trend chart of London Silver
业务场景功能的继续修改
随机推荐
How to apply for PMP project management certification examination?
Summary of week 22-07-02
Best practice case of enterprise digital transformation: introduction and reference of cloud based digital platform system security measures
Using the uniapp rich text editor
C语言中sizeof操作符的坑
In June, the list of winners of "Moli original author program" was announced! Invite you to talk about the domestic database
挖财学院开户安全的吗?开户怎么开?
Verilog tutorial (11) initial block in Verilog
如何有效对直流列头柜进行监测
Design of emergency lighting evacuation indication system for urban rail transit station
MIT-6.824-lab4B-2022(万字思路讲解-代码构建)
[论文阅读] TUN-Det: A Novel Network for Thyroid Ultrasound Nodule Detection
Fs8b711s14 electric wine bottle opener MCU IC scheme development special integrated IC
Paddleocr tutorial
如果炒股开华泰证券的户,在网上开户安全吗?
Significance of acrel EMS integrated energy efficiency platform in campus construction
业务场景功能的继续修改
How to use fast parsing to make IOT cloud platform
Microservice
Instructions for go defer