十字星座
来源:互联网 发布:linux 根目录满了 编辑:程序博客网 时间:2024/04/27 15:05
Description
Solution
很好的水题。
显然对于公共点
u 与往下的路径最长的四个儿子组成一对路径。u 与往下的路径最长的三个儿子、以及u 的父亲组成一对路径。
于是
- 第一遍
dfs ,处理出u 往下的最长的四个路径,f[u][0],f[u][1],f[u][2],f[u][3] 。 - 第二遍
dfs ,处理出u 往上走的最长路径g[u] 。往上走有两种方案,要么继续往上走,要么走到u 的某个兄弟。 - 第三遍
dfs 更新答案,ans=max(∑3i=0f[u][i],∑2i=0f[u][i]+g[u])
每个点最多被访问
详见代码。不同的实现方法常数、代码复杂度差别较大。
#include<bits/stdc++.h>using namespace std;#define N 200001#define rep(i, a, b) for (int i = a; i <= b; i++)#define drp(i, a, b) for (int i = a; i >= b; i--)#define fech(i, x) for (int i = 0; i < x.size(); i++)#define ll long longinline int read() { int x = 0, flag = 1; char ch = getchar(); while (!isdigit(ch)) { if (!(ch ^ '-')) flag = -1; ch = getchar(); } while (isdigit(ch)) x = (x << 1) + (x << 3) + ch - '0', ch = getchar(); return x * flag;}int n;struct edge { int u, v, w; } eg[N]; int tot;vector<int> tr[N]; int siz[N];#define gte edge e = eg[tr[u][i]]int f[N][6], g[N], ans = -1;bool cmp(int x, int y) { return x > y; }void dfsf(int u, int fr) { fech(i, tr[u]) { gte; if(!(e.v ^ fr)) continue; siz[u]++, dfsf(e.v, u), f[u][4] = f[e.v][0] + e.w, sort(f[u], f[u] + 5, cmp); }}void dfsg(int u, int fr) { fech(i, tr[u]) { gte; if(!(e.v ^ fr)) continue; if(f[u][0] ^ (f[e.v][0] + e.w)) g[e.v] = max(g[u], f[u][0]) + e.w; else g[e.v] = max(g[u], f[u][1]) + e.w; dfsg(e.v, u); }}void dfs(int u, int fr) { int t = 0; rep(i, 0, 3) t += f[u][i]; if(siz[u] > 3) ans = max(ans, t); if(siz[u] > 2 && fr) ans = max(ans, t - f[u][3] + g[u]); fech(i, tr[u]) { gte; if(e.v ^ fr) dfs(e.v, u); }}int main() { n = read(); rep(i, 2, n) { int u = read(), v = read(), w = read(); eg[++tot] = edge { u, v, w }; tr[u].push_back(tot); eg[++tot] = edge { v, u, w }; tr[v].push_back(tot); } dfsf(1, 0); dfsg(1, 0); dfs(1, 0); cout << ans; return 0;}
阅读全文
0 0
- 十字星座
- 星座
- 星座
- 星座
- 星座
- 星座
- 星座
- 星座
- 十字绣
- 十字绣
- 十字图
- 十字图蓝桥杯
- 星座排名~
- 星座童话
- 星座男人
- 十二星座
- 星座 FAQ
- 星座划分
- java 常用数据结构
- MySql FEDERATED ENGINE总结使用
- STL — SGT STL的私房菜: __type_traits
- linux命令查看文件bom头,并删掉bom
- [Leetcode] 552. Student Attendance Record II 解题报告
- 十字星座
- 欢迎来到 Gikod!
- 机器学习之决策树与随机森林
- 常用笔记-CSS
- 持续集成测试(3) -- kubernetes环境搭建
- python @classmethod和@staticmethod、@property以及装饰器
- MySql存储过程调试
- 数据结构实验之查找三:树的种类统计
- 字符游戏-智能蛇(代码版)