当前位置:网站首页>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;
}
边栏推荐
- 如何用快解析自制IoT云平台
- Application of multi loop instrument in base station "switching to direct"
- Is it safe to open and register new bonds? Is there any risk? Is it reliable?
- 人生无常,大肠包小肠, 这次真的可以回家看媳妇去了。。。
- How to apply for PMP project management certification examination?
- 巩固表达式C# 案例简单变量运算
- [binary tree] the maximum difference between a node and its ancestor
- PMP证书续证流程
- French scholars: the explicability of counter attack under optimal transmission theory
- 积分商城游戏设置的基本要点
猜你喜欢
Design of emergency lighting evacuation indication system for urban rail transit station
【雅思阅读】王希伟阅读P4(matching1)
[IELTS reading] Wang Xiwei reading P4 (matching1)
ICML 2022 || 3DLinker: 用于分子链接设计的E(3)等变变分自编码器
微服务(Microservice)那点事儿
他做国外LEAD,用了一年时间,把所有房贷都还清了
同事的接口文档我每次看着就头大,毛病多多。。。
Pytoch --- use pytoch to realize linknet for semantic segmentation
Mit-6.824-lab4b-2022 (10000 word idea explanation - code construction)
PMP certificate renewal process
随机推荐
Pytoch --- use pytoch to realize linknet for semantic segmentation
企业里Win10 开启BitLocker锁定磁盘,如何备份系统,当系统出现问题又如何恢复,快速恢复又兼顾系统安全(远程设备篇)
Best practice case of enterprise digital transformation: introduction and reference of cloud based digital platform system security measures
跨域请求
JS how to realize array to tree
Jar batch management gadget
How to use fast parsing to make IOT cloud platform
Face recognition 5- insight face padding code practice notes
Is it safe to open and register new bonds? Is there any risk? Is it reliable?
"Xiaodeng" domain password policy enhancer in operation and maintenance
电力运维云平台:开启电力系统“无人值班、少人值守”新模式
Netcore3.1 JSON web token Middleware
How to avoid arc generation—— Aafd fault arc detector solves the problem for you
Solution record of jamming when using CAD to move bricks in high configuration notebook
Continuous modification of business scenario functions
A new method for analyzing the trend chart of London Silver
The input of uniapp is invalid except for numbers
模板的进阶
打新债开户注册安全吗?有没有风险的?靠谱吗?
Intelligence test to see idioms guess ancient poems wechat applet source code