当前位置: 首页 > backend >正文

UVA1537 Picnic Planning

题目

UVA1537 Picnic Planning

算法标签: 最小生成树, k r u s k a l kruskal kruskal重构树, 树形 d p dp dp

思路

1 1 1号点设置为终点, 然后执行重构树计算度数限制下的 M S T MST MST

重构树代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>using namespace std;const int N = 60, M = N * N, INF = 0x3f3f3f3f;int n, k;struct Edge {int u, v, w;bool operator<(const Edge &e) const {return w < e.w;}
} edges[N << 1];int val[M], cnt, p[N];
map<string, int> mp;
int e_cnt;void add(int u, int v, int w) {edges[e_cnt++] = {u, v, w};
}int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}int kruskal() {for (int i = 1; i <= cnt; ++i) p[i] = i;sort(edges, edges + e_cnt);int ans = 0;vector<int> vec;for (int i = 0; i < e_cnt; ++i) {auto &[u, v, w] = edges[i];int fa1 = find(u), fa2 = find(v);if (fa1 == fa2) continue;if (val[fa1] > val[fa2]) swap(fa1, fa2);p[fa2] = fa1;ans += w;//如果存在特殊边, 计算如果添加该边替换当前边的收益if (val[fa2] < INF >> 1) vec.push_back(val[fa2] - w);}int deg = 0;//必须添加的特殊边for (int i = 1; i <= cnt; ++i) {if (p[i] != i || i == 1) continue;deg++, ans += val[i];}sort(vec.begin(), vec.end());for (int i = 0; i < k - deg; ++i) ans += vec[i];return ans;
}int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int T;cin >> T;while (T--) {mp.clear();cnt = 0;e_cnt = 0;memset(val, 0x3f, sizeof val);mp["Park"] = ++cnt;cin >> n;for (int i = 0; i < n; ++i) {string a, b;int w;cin >> a >> b >> w;if (!mp[a]) mp[a] = ++cnt;if (!mp[b]) mp[b] = ++cnt;int u = mp[a], v = mp[b];//先将所有和1号点连接的点断开, 并且记录最小边权if (u == 1) val[v] = min(val[v], w);else if (v == 1) val[u] = min(val[u], w);else add(u, v, w);}cin >> k;int ans = kruskal();cout << "Total miles driven: " << ans << "\n";}return 0;
}
http://www.xdnf.cn/news/3123.html

相关文章:

  • transform-实现Encoder 编码器模块
  • NFS-网络文件系统
  • 【codeforces 2086d】背包+组合数学
  • Java之BigDecimal
  • 杭电oj(1015、1016、1072、1075)题解
  • 在线文章系统自动化测试报告
  • MIT6.S081-lab7前置
  • 免费超好用的电脑操控局域网内的手机(多台,无线)
  • Leetcode 3530. Maximum Profit from Valid Topological Order in DAG
  • CSS:编写位置分类及优先级
  • 从Markdown到专业文档:如何用Python打造高效格式转换工具
  • Qwen3-8B安装与体验-速度很快!
  • Yaml文件
  • 数字逻辑--期末大复习
  • 激光雷达点云去畸变
  • ctf.show 卷王杯 pwn签到
  • DDI0487--A1.7
  • onlyoffice部署
  • Ignoring query to other database
  • Elasticsearch:ES|QL lookup JOIN 介绍 - 8.18/9.0
  • STP学习
  • 排序版研究方向
  • docker部署的Nextcloud,处于维护模式,如何解决
  • 华为自研的仓颉编程语言介绍
  • Qwen3 系列的后训练技术
  • 无人机航拍羊只检测数据集VOC+YOLO格式6065张1类别
  • Spring计时器StopWatch 统计各个方法执行时间和占比
  • ModbusRTU转PROFIBUS网关通讯
  • 30天通过软考高项-第七天
  • 如何计算数码显微镜的放大倍率