当前位置:网站首页>P4408 [NOI2003] 逃学的小孩(树的直径)
P4408 [NOI2003] 逃学的小孩(树的直径)
2022-07-05 00:02:00 【eva_can(not)survive】
[NOI2003] 逃学的小孩 - 洛谷https://www.luogu.com.cn/problem/P4408一道学习树的直径的好题。
题目要求最长的时间,说明答案应该是树的直径+max(起点离最近的朋友家的距离)
所以我们不仅仅要求树的直径,更要记录直径上的点,并遍历它们求最长延申距离。
#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, m;
int head[MAXN];
int nxt[MAXN];
int ver[MAXN];
ll cost[MAXN];
ll dis[MAXN];
int last[MAXN];
int cnt;
void add(int x, int y, ll c) {
ver[++cnt] = y;
nxt[cnt] = head[x];
cost[cnt] = c;
head[x] = cnt;
}
ll ans;
ll maxlen;
int recv, recu;
bool vis[MAXN];
void dfs(int p, ll rec, int fa) {
if (maxlen < rec)
maxlen = rec, recv = p;
for (int i = head[p]; i; i = nxt[i]) {
int v = ver[i];
if (v == fa)
continue;
// dis[v]=dis[p]+cost[i];
dfs(v, rec + cost[i], p);
}
}
void dfs1(int p, int fa) {
last[p] = fa;
if (maxlen < dis[p])
maxlen = dis[p], recu = p;
for (int i = head[p]; i; i = nxt[i]) {
int v = ver[i];
if (v == fa)
continue;
dis[v] = dis[p] + cost[i];
dfs1(v, p);
}
}
ll mxx[MAXN];
ll mx;
void dfs2(int p, ll rec, int fa) {
mx = max(mx, rec);
for (int i = head[p]; i; i = nxt[i]) {
int v = ver[i];
if (vis[v] || v == fa)
continue;
dfs2(v, rec + cost[i], p);
}
}
int main() {
scanf("%d %d", &n, &m);
int x, y;
ll c;
for (int i = 1; i <= m; i++) {
scanf("%d %d %lld", &x, &y, &c);
add(x, y, c);
add(y, x, c);
}
dfs(1, 0, 0);
maxlen = 0;
dfs1(recv, 0);
ll tmp = 0;
for (int i = recu; i; i = last[i]) {
vis[i] = 1;
}
for (int i = recu; i; i = last[i]) {
mx = 0;
dfs2(i, 0, 0);
mxx[i] = mx;
}
mx = 0;
for (int i = recu; i; i = last[i]) {
tmp = min(dis[i], maxlen - dis[i]);
mx = max(mx, mxx[i] + tmp);
}
printf("%lld\n", mx + maxlen);
return 0;
}
边栏推荐
- 他做国外LEAD,用了一年时间,把所有房贷都还清了
- [kotlin] the third day
- Parsing of XML
- Blue sky nh55 series notebook memory reading and writing speed is extremely slow, solution process record
- Intelligence test to see idioms guess ancient poems wechat applet source code
- 快解析——好用的内网安全软件
- Financial markets, asset management and investment funds
- js如何实现数组转树
- Selected cutting-edge technical articles of Bi Ren Academy of science and technology
- [IELTS reading] Wang Xiwei reading P3 (heading)
猜你喜欢

How to effectively monitor the DC column head cabinet

Pytoch --- use pytoch to realize linknet for semantic segmentation

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

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

快解析——好用的内网安全软件

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

【雅思阅读】王希伟阅读P4(matching1)

巩固表达式C# 案例简单变量运算

Using fast parsing intranet penetration to realize zero cost self built website

高配笔记本使用CAD搬砖时卡死解决记录
随机推荐
The pit of sizeof operator in C language
[IELTS reading] Wang Xiwei reads P4 (matching2 paragraph information matching question [difficult])
Jar批量管理小工具
ICML 2022 | 3dlinker: e (3) equal variation self encoder for molecular link design
【监控】zabbix
What is the difference between port mapping and port forwarding
[论文阅读] TUN-Det: A Novel Network for Thyroid Ultrasound Nodule Detection
青海省国家湿地公园功能区划数数据、全国湿地沼泽分布数据、全国省市县自然保护区
Compare two vis in LabVIEW
人生无常,大肠包小肠, 这次真的可以回家看媳妇去了。。。
It's too convenient. You can complete the code release and approval by nailing it!
【路径规划】RRT增加动力模型进行轨迹规划
[path planning] RRT adds dynamic model for trajectory planning
Expand your kubecl function
He worked as a foreign lead and paid off all the housing loans in a year
If you open an account of Huatai Securities by stock speculation, is it safe to open an account online?
业务实现-日志写到同一个行数据里面
[kotlin] the third day
取得PMP證書需要多長時間?
How to apply for PMP project management certification examination?