news 2026/10/17 8:16:12

洛谷 P1453:城市环路 ← 基环树

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷 P1453:城市环路 ← 基环树

【题目来源】
https://www.luogu.com.cn/problem/P1453

【题目描述】
一座城市,往往会被人们划分为几个区域,例如住宅区、商业区、工业区等等。
B 市就被分为了以下的两个区域——城市中心和城市郊区。在这两个区域的中间是一条围绕 B 市的环路,环路之内便是 B 市中心。
整个城市可以看做一个 n 个点,n 条边的单圈图(保证图连通),唯一的环便是绕城的环路。保证环上任意两点有且只有 2 条简单路径互通。图中的其它部分皆隶属城市郊区。
现在,有一位名叫 Jim 的同学想在 B 市开店,但是任意一条边的 2 个点不能同时开店,每个点都有一定的人流量,第 i 个点的人流量是 pi,在该点开店的利润就等于 pi×k,其中 k 是一个常数。
Jim 想尽量多的赚取利润,请问他能获取的利润最大为多少?

【输入格式】
第一行一个整数 n,代表城市中点的个数。城市中的 n 个点由 0∼n−1 编号。
第二行有 n 个整数,第 (i+1) 个整数表示第 i 个点的人流量 pi。
接下来 n 行,每行有两个整数 u,v,代表存在一条连接 u 和 v 的道路。
最后一行有一个实数,代表常数 k。

【输出格式】
输出一行一个实数代表答案,结果保留一位小数。

【输入样例】
4
1 2 1 5
0 1
0 2
1 2
1 3
2

【输出样例】
12.0

【数据范围】
对于 20% 的数据,保证 n≤100。
另有 20% 的数据,保证环上的点不超过 2000 个。
对于 100% 的数据,保证 1≤n≤10^5,1≤pi≤10^4,0≤u, v<n,0≤k≤10^4,k 的小数点后最多有 6 位数字。

【算法分析】
● 基环树:https://blog.csdn.net/hnjzsyjyj/article/details/167919947

● 这是一个纯环,没有挂树。环上每个点权值即城市的人流量。约束是环形最大权独立集。
标准做法:断边法。删掉环边,分两次做线性 DP。

【算法代码】

#include <bits/stdc++.h> using namespace std; typedef pair<int,int> PII; const int N=1e5+5; vector<int> g[N]; int pre[N],p[N]; double f[N][2]; int ru,rv; int n; int find(int x) { if(x!=pre[x]) pre[x]=find(pre[x]); return pre[x]; } void dfs(int u,int fa) { f[u][1]=p[u]; f[u][0]=0; for(int v:g[u]) { if(v==fa) continue; dfs(v,u); f[u][1]+=f[v][0]; f[u][0]+=max(f[v][0],f[v][1]); } } int main() { cin>>n; for(int i=0; i<n; i++) cin>>p[i]; for(int i=0; i<n; i++) pre[i]=i; for(int i=0; i<n; i++) { int u,v; cin>>u>>v; int fu=find(u),fv=find(v); if(fu!=fv) { pre[fu]=fv; g[u].push_back(v); g[v].push_back(u); } else ru=u, rv=v; } double k; cin>>k; dfs(rv,-1); double ans1=f[rv][0]; dfs(ru,-1); double ans2=f[ru][0]; double res=max(ans1,ans2)*k; printf("%.1lf\n",res); return 0; } /* in: 4 1 2 1 5 0 1 0 2 1 2 1 3 2 out: 12.0 */



【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/167986230
https://blog.csdn.net/hnjzsyjyj/article/details/167918148
https://blog.csdn.net/hnjzsyjyj/article/details/167919947

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 8:16:03

数字员工赋能销售:从配置到调优的完整实践指南

最近在和几个做销售运营的朋友聊数字化转型&#xff0c;发现大家不约而同都在提同一个方向&#xff1a;数字员工。过去提到自动化销售&#xff0c;大家第一反应是外呼机器人或者群发助手&#xff0c;但实际落地之后&#xff0c;很多团队发现这类工具要么太机械&#xff0c;要么…

作者头像 李华
网站建设 2026/10/17 8:13:59

Android焦点切换ANR排查:从源码机制到实战修复

1. 凌晨三点的那条ANR告警&#xff1a;焦点切换问题的现场画像先说实话&#xff0c;每年我们团队处理的各种ANR里&#xff0c;真正由“焦点切换”四个字直接背锅的&#xff0c;其实只占很小一部分。但这部分问题有一个共同特点&#xff1a;极其隐蔽&#xff0c;平时怎么点都不出…

作者头像 李华
网站建设 2026/10/17 8:13:12

基于凸优化与张量分解的多通道信号去噪Matlab代码实现

简介&#xff1a;这份Matlab代码资源面向从事高维数据分析、信号处理与机器学习的研究者和工程师&#xff0c;聚焦于用凸优化方法实现张量分解&#xff0c;从而完成数据恢复与去噪任务。张量作为矩阵向高维的推广&#xff0c;能有效刻画图像、视频、多模态数据的内在结构&#…

作者头像 李华
网站建设 2026/10/17 8:13:02

GraphCoT-VLA:融合场景图与思维链的机器人空间理解与意图推理框架

有人说&#xff0c;做机器人最让人头疼的不是电机、不是结构&#xff0c;而是“它听不懂人话”。你明明让机械臂“把桌上那个东西拿过来”&#xff0c;它却在两个杯子之间犹豫&#xff0c;甚至直接抓了旁边的水壶。这背后缺的不是视觉能力&#xff0c;而是两个东西&#xff1a;…

作者头像 李华
网站建设 2026/10/17 8:12:01

VC二维码解析底层逻辑:从图像处理到Reed-Solomon纠错

简介&#xff1a;这份资源面向具备一定 C 基础、希望在 Windows 平台实现二维码识别的开发者&#xff0c;基于 Microsoft Visual C 与 MFC 框架&#xff0c;结合开源 ZBar 库完成 QR Code 等二维码的解码与解析。内容涵盖 ZBar 库的集成配置、头文件与库文件引用、解码代码编写…

作者头像 李华
网站建设 2026/10/17 8:11:58

AI辅助毕业设计如何避免被检测?电气论文写作实战指南

电气专业学生这几天问得最多的一个问题&#xff0c;不是我之前写的那些选型问题&#xff0c;而是这个&#xff1a;用ChatGPT/DeepSeek辅助毕业设计&#xff0c;到底怎么避免被AI检测标记&#xff1f;老实说&#xff0c;这个问题本身就问偏了。真正该关心的不是“怎么骗过检测器…

作者头像 李华