当前位置:网站首页>P4408 [noi2003] truant children (tree diameter)
P4408 [noi2003] truant children (tree diameter)
2022-07-05 00:05:00 【eva_ can(not)survive】
[NOI2003] Kids playing truant - Luogu https://www.luogu.com.cn/problem/P4408 A good question for learning the diameter of trees .
The longest time required for the topic , Explain that the answer should be the diameter of the tree +max( The distance from the starting point to the nearest friend's home )
So we don't just ask for the diameter of the tree , Record the point on the diameter , And traverse them to find the longest extension distance .
#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;
}
边栏推荐
- Is the account opening link of Huatai Securities with low commission safe?
- 人生无常,大肠包小肠, 这次真的可以回家看媳妇去了。。。
- How to apply for PMP project management certification examination?
- 模板的进阶
- In June, the list of winners of "Moli original author program" was announced! Invite you to talk about the domestic database
- 【kotlin】第三天
- [IELTS reading] Wang Xiwei reading P4 (matching1)
- Meet ThreadPoolExecutor
- Robot reinforcement learning synergies between pushing and grassing with self supervised DRL (2018)
- Consolidated expression C case simple variable operation
猜你喜欢

Jar batch management gadget

IT转测试岗,从迷茫到坚定我究竟付出了什么?

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

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

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

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

Skills in analyzing the trend chart of London Silver

业务场景功能的继续修改
随机推荐
圖解網絡:什麼是網關負載均衡協議GLBP?
端口映射和端口转发区别是什么
How to avoid arc generation—— Aafd fault arc detector solves the problem for you
【kotlin】第三天
Instructions for go defer
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
[JS] - [dynamic planning] - Notes
巩固表达式C# 案例简单变量运算
Every time I look at the interface documents of my colleagues, I get confused and have a lot of problems...
电力运维云平台:开启电力系统“无人值班、少人值守”新模式
[paper reading] Tun det: a novel network for meridian ultra sound nodule detection
Power operation and maintenance cloud platform: open the new mode of "unattended and few people on duty" of power system
Skills in analyzing the trend chart of London Silver
AcWing164. 可达性统计(拓扑排序+bitset)
OSEK standard ISO_ 17356 summary introduction
多回路仪表在基站“转改直”方面的应用
如何有效对直流列头柜进行监测
If you open an account of Huatai Securities by stock speculation, is it safe to open an account online?
XML的解析
Chinese verification of JS regular expressions (turn)