当前位置:网站首页>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;
}边栏推荐
- 电力运维云平台:开启电力系统“无人值班、少人值守”新模式
- XML的解析
- The pit of sizeof operator in C language
- OSEK standard ISO_ 17356 summary introduction
- Instructions for go defer
- 香港珠宝大亨,22亿“抄底”佐丹奴
- "Xiaodeng" domain password policy enhancer in operation and maintenance
- P4408 [NOI2003] 逃学的小孩(树的直径)
- ICML 2022 | 3dlinker: e (3) equal variation self encoder for molecular link design
- Parsing of XML
猜你喜欢

In June, the list of winners of "Moli original author program" was announced! Invite you to talk about the domestic database
![[kotlin] the third day](/img/c4/1bf1b00c4a1dda920ad3bb178ac0f9.png)
[kotlin] the third day

企业里Win10 开启BitLocker锁定磁盘,如何备份系统,当系统出现问题又如何恢复,快速恢复又兼顾系统安全(远程设备篇)

Microservice

PMP certificate renewal process

「运维有小邓」域密码策略强化器

Fast parsing intranet penetration helps enterprises quickly achieve collaborative office

如何有效对直流列头柜进行监测

Fast analysis -- easy to use intranet security software

雅思考试流程、需要具体注意些什么、怎么复习?
随机推荐
uniapp微信小程序拿来即用的瀑布流布局demo2(方法二)(复制粘贴即可使用,无需做其他处理)
Is it safe to open and register new bonds? Is there any risk? Is it reliable?
企业应用业务场景,功能添加和修改C#源码
Hong Kong Jewelry tycoon, 2.2 billion "bargain hunting" Giordano
基于三维gis平台的消防系统运用
IELTS examination process, what to pay attention to and how to review?
Expand your kubecl function
如何避免电弧产生?—— AAFD故障电弧探测器为您解决
Application of fire fighting system based on 3D GIS platform
Robot reinforcement learning synergies between pushing and grassing with self supervised DRL (2018)
Ap8022 switching power supply small household appliances ACDC chip offline switching power supply IC
Acrel-EMS综合能效平台在校园建设的意义
Solution record of jamming when using CAD to move bricks in high configuration notebook
如何有效对直流列头柜进行监测
PMP certificate renewal process
Summary of week 22-07-02
"Xiaodeng" domain password policy enhancer in operation and maintenance
Financial markets, asset management and investment funds
企业里Win10 开启BitLocker锁定磁盘,如何备份系统,当系统出现问题又如何恢复,快速恢复又兼顾系统安全(远程设备篇)
多回路仪表在基站“转改直”方面的应用