hetao 国庆

news/2025/10/6 14:37:08/文章来源:https://www.cnblogs.com/Dtwww/p/19127608

Day 5

T3

Solution

Subtask 1 可能比较具有启发性。

每个人只关心:每条路径上的最大值。我们要让这个值最小。所以容易发现他们只会在最小瓶颈树上走。

由于 MST 一定是最小瓶颈树,所以我们跑 kruskal 然后把树建出来。

此时边分为两类:

  • 非树边:
    • 考虑 \((u, v)\) 这条边,记 \(mx\) 为树上 \((u, v)\) 路径上边权的最大值。
      • 那么这条边的边权如果 \(< x\) 那么他就会代替树上的一条边。
      • 如果边权 \(= x\) 则他也可能成为树边。
    • 所以这条边的边权至少为 \(mx + 1\)
  • 树边:
    • 考虑我们可以有哪些边来替代这条树边 \((u, v)\)
      • 考虑添加一条非树边 \((u, v)\) 进来,则你可以把树上 \((u, v)\) 路径上的边随意删一个。
      • 所以这条边可以覆盖 \((u, v)\) 这条路径上的边。
    • 所以我们这条边的边权至少为可以覆盖到这条边的边边权的最小值。

那对于非树边你就可以树上倍增维护路径最大值。

对于树边你就可以按边权从大到小排序,然后树剖做区间覆盖。查询单点查就行。

Code

#include <bits/stdc++.h>using namespace std;const int N = 2e5 + 10, inf = 0x3f3f3f3f;int n, m, p[N], dep[N], f[19][N], z[19][N], son[N], top[N], dfn[N], cnt, sz[N], ans[N];
struct edge { int u, v, w, id; bool ok; } e[N];
vector<pair<int, int>> g[N];void dfs(int u, int fa)
{dep[u] = dep[f[0][u] = fa] + 1;sz[u] = 1;for (auto t : g[u]) {int v = t.first, w = t.second;if (v == fa) continue;z[0][v] = w;dfs(v, u); sz[u] += sz[v];if (sz[v] > sz[son[u]]) son[u] = v;}
}void dfs1(int u, int t)
{top[u] = t;dfn[u] = ++cnt;if (son[u]) dfs1(son[u], t);for (auto k : g[u]) {int v = k.first;if (v != f[0][u] && v != son[u]) dfs1(v, v);}
}int lca(int x, int y)
{int ans = 0;if (dep[x] < dep[y]) swap(x, y);for (int i = 18; i >= 0; i--) if (dep[f[i][x]] >= dep[y]) ans = max(ans, z[i][x]), x = f[i][x];if (x == y) return ans;for (int i = 18; i >= 0; i--) {if (f[i][x] != f[i][y]) {ans = max(ans, max(z[i][x], z[i][y]));x = f[i][x], y = f[i][y];}}ans = max(ans, max(z[0][x], z[0][y]));return ans;
}int fifa(int x) { return p[x] == x ? p[x] : p[x] = fifa(p[x]); }bool merge(int x, int y)
{x = fifa(x), y = fifa(y);if (x == y) return false;p[x] = y;return true;
}int tr[N << 2], tag[N << 2];#define ls (rt << 1)
#define rs (rt << 1 | 1)
#define mid (l + r) / 2void pushup(int rt) { tr[rt] = min(tr[ls], tr[rs]); }void pushdown(int rt)
{int &u = tag[rt];if (!u) return;tr[ls] = tr[rs] = tag[ls] = tag[rs] = u;u = 0;
}void update(int rt, int l, int r, int sp, int ep, int v)
{if (sp <= l && r <= ep) return tr[rt] = tag[rt] = v, void();pushdown(rt);if (sp <= mid) update(ls, l, mid, sp, ep, v);if (ep > mid) update(rs, mid + 1, r, sp, ep, v);pushup(rt);
}int query(int rt, int l, int r, int p)
{if (l == r) return tr[rt];pushdown(rt);if (p <= mid) return query(ls, l, mid, p);return query(rs, mid + 1, r, p);
}void addpath(int x, int y, int w)
{while (top[x] != top[y]) {if (dep[top[x]] < dep[top[y]]) swap(x, y);update(1, 1, n, dfn[top[x]], dfn[x], w);x = f[0][top[x]];}if (dfn[x] > dfn[y]) swap(x, y);update(1, 1, n, dfn[x] + 1, dfn[y], w);
}void kruskal()
{for (int i = 1; i <= n; i++) p[i] = i;sort (e + 1, e + m + 1, [&](edge x, edge y) { return x.w < y.w; });for (int i = 1; i <= m; i++) {int u = e[i].u, v = e[i].v, w = e[i].w;if (merge(u, v)) {e[i].ok = 1;g[u].emplace_back(v, w);g[v].emplace_back(u, w);}}
}int main()
{freopen("skyline.in", "r", stdin);freopen("skyline.out", "w", stdout);cin.tie(0)->ios::sync_with_stdio(false);cin >> n >> m;for (int i = 1; i <= m; i++) {int u, v, w; cin >> u >> v >> w;e[i] = (edge){ u, v, w, i, 0 };}kruskal();dfs(1, 0), dfs1(1, 1);for (int j = 1; j <= 18; j++)for (int i = 1; i <= n; i++) f[j][i] = f[j - 1][f[j - 1][i]], z[j][i] = max(z[j - 1][i], z[j - 1][f[j - 1][i]]);for (int i = 1; i <= 4 * n; i++) tr[i] = inf, tag[i] = 0;for (int i = m; i >= 1; i--) {if (e[i].ok) continue;addpath(e[i].u, e[i].v, e[i].w);}for (int i = 1; i <= m; i++) {if (e[i].ok) {ans[e[i].id] = query(1, 1, n, dfn[(dep[e[i].u] > dep[e[i].v] ? e[i].u : e[i].v)]);} else {ans[e[i].id] = lca(e[i].u, e[i].v);}}for (int i = 1; i <= m; i++) cout << (ans[i] == inf ? -1 : ans[i] + 1) << " ";return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍:AI健康小屋+微高压氧舱:科技如何重构我们的健康防线?

详细介绍:AI健康小屋+微高压氧舱:科技如何重构我们的健康防线?2025-10-06 14:34 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !im…

网站制作关键技术服务器可以备案别人的域名吗

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*程序功能&#xff1a;计算一个正整数n的阶乘&#xff0c;目前最大能运算10000的阶乘&#xff0c;可秒杀。程序意义&#xff1a;加强自己对于大数的处理。说明&#xff1a;此程序对乘法和除法还未做任何优化&#xff0c;如果用上位…

详细介绍:运维 pgsql 安装完后某次启动不了

详细介绍:运维 pgsql 安装完后某次启动不了pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…

廊坊高端品牌网站建设广州西樵网站制作

基坑整体坍塌不亲身经历&#xff0c;不知其恐怖▼前段时间&#xff0c;南宁绿地中央广场房地产项目D号地块(二期)基坑北侧约60米支护桩突然崩塌&#xff01;所幸无人伤亡。深基坑施工安全生产管理要点一、基坑开挖 1、 临边防护(1)基坑施工必须按要求进行&#xff0c;具体临边防…

visual studio

Microsoft Visual Studio 无法启动程序” D:\install\installedLibllibigl-2.1.0\build\x64\Debug\INSTALL" 系统找不到指定的文件。

[MCP] StreamableHTTPServer

远程通信方式 通信方式:Stdio: 推荐,高效、简洁、本地 Streamable HTTP: 远程前置知识 SSE 全称 Server-Sent Events,中文是“服务器发送事件”。是一种基于 HTTP 的单向通信协议,由浏览器发起连接,服务器可以持…

HttpServletResponse 对象用来做什么? - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

谁有国外hs网站手表购物网站排名

核心提示&#xff1a;相信很多机友都会使用UC浏览器&#xff0c;但是其多个功能你们能了解多少? 下面小编就为大家介绍UC浏览器云标签使用方法吧! 1、打开【UC浏览器】&#xff0c;点击【多窗口】按钮&#xff0c;然后点击【云标签】;(如下图所示) 2、登陆微博、QQ等&#…

牛客 周赛109 20250924

牛客 周赛109 20250924 https://ac.nowcoder.com/acm/contest/116945 A: 题目大意: 给定两个坐标,判断和原点一起能否构成一个直角三角形 void solve(){double x, y, u, v;cin >> x >> y >> u &g…

域名网站如何做市场推广长沙网页网站制作

在赋予一个string值的时候&#xff0c;可以用单引号或者双引号。 1.单引号和双引号的区别&#xff1a; 单引号&#xff1a;不会翻译变量。 双引号&#xff1a;会翻译变量&#xff0c;会将变量替换为之前赋予变量的值。 例子&#xff1a; &#xff08;1&#xff09;单引号&a…

建歌网站多少钱温州网站建设价格

💡💡💡本文独家改进:卷积和注意力融合模块(CAFMAttention),增强对全局和局部特征的提取能力,2024年最新的改进思路 💡💡💡创新点:卷积和注意力巧妙设计 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特征的提取能力;2)放在detect前面,增…

罗技G102螺丝型号

共有三种,都是PH00螺丝(反正就就是很小的十字螺丝) 外壳固定用  M1.4*4mm  直径3mm厚0.5的平头螺丝  共三个 侧键固定用  M2*4mm   直径5mm厚0.5的平头螺丝  共俩个 主板固定用  M1.4*3mm  直径4…

详细介绍:深入剖析C#构造函数执行:基类调用、初始化顺序与访问控制

详细介绍:深入剖析C#构造函数执行:基类调用、初始化顺序与访问控制pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

公司网站建设进度vitality wordpress

TCP与UDP TCP 是面向连接的、可靠的流协议&#xff0c;通过三次握手建立连接&#xff0c;通讯完成时要拆除连接。 UDP是面向无连接的通讯协议&#xff0c;UDP通讯时不需要接收方确认&#xff0c;属于不可靠的传输&#xff0c;可能会出现丢包现象 端口号&#xff1a; 端口号用…

上海网站建设 销售营销型网站开发推荐

一、产品介绍 此次发布一款7寸高清全新外壳产品&#xff0c;让HMI人机界面家族再添一新成员。该产品相比其他外壳有以下5个大改动&#xff1a; 1 表面玻璃盖板使用2.5D立体结构&#xff1b; 2 液晶盖板采用一体黑设计&#xff0c;且液晶屏与触摸板是全贴合结构&#xff1b; …

广州网站建设培训学校seo优化外包

了解动态内存函数 前言&#xff1a;一、malloc函数二、calloc函数三、realloc函数四、free函数 前言&#xff1a; 在C语言中&#xff0c;动态内存函数是块重要的知识点。以往&#xff0c;我们开辟空间都是固定得&#xff0c;数组编译结束后就不能继续给它开辟空间了&#xff0…

[LUCKY」在Windows下使用STUN穿透实现Minecraft联机并设置SRV记录

[LUCKY」在Windows下使用STUN穿透实现Minecraft联机并设置SRV记录2024.02.18 本教程目标 在无公网环境低成本的实现较为稳定的 Minecraft Java版联机(服务器) 目前常见的联机(服务器)方法及其问题(针对好友联机和小…

系统管理员的日常困境与幽默自嘲

这篇文章通过Reddit论坛上系统管理员们的真实讨论,展现了IT专业人员面对"请联系系统管理员"这类提示时的无奈与幽默,揭示了技术支持工作中的常见困境和职业共鸣。这篇文章通过Reddit论坛上系统管理员们的真…

46设计网站官网网站开发项目团队人员

前言 如果你被hutool坑过、被fastjson坑过&#xff0c;nicetool帮你解脱&#xff01; 如果你想用稳定、Spring原生的工具类&#xff0c;nicetool已帮你封装&#xff01; nicetool不生产工具&#xff0c;只是JDK和Spring的封装侠&#xff01; 介绍 nicetool&#xff1a;超好…

实用指南:Docker 在 AI 开发中的实践:GPU 支持与深度学习环境的容器化

实用指南:Docker 在 AI 开发中的实践:GPU 支持与深度学习环境的容器化pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …