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

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;
}

相关文章:

  • java 解析入参里的cron表达式,修改周时间
  • 链表的中间节点
  • JavaScript高级进阶(五)
  • HTTP协议重定向及交互
  • UniApp页面路由详解
  • AbortController 取消请求
  • C++23 std::byteswap:反转字节 (P1272R4)
  • 征战高端10余载,OPPO少了昔日的锐气
  • 链表反转_leedcodeP206
  • 如何查看和验证AWS CloudFront的托管区域ID
  • Vue + ECharts 实现多层极坐标环形图
  • 通过AWS Console连接服务器,简化运维过程
  • 企业出海降本:如何将应用从 AWS EC2 快速无缝迁移至DigitalOcean Droplet
  • 揭开应用程序的神秘面纱:深入了解 AWS X-Ray
  • 【docker】启动临时MongoDB容器、挂载数据卷运行数据库服务,并通过备份文件恢复MongoDB数据库备份数据
  • SQLMesh增量模型实战指南:时间范围分区
  • nginx 核心功能
  • 鸟笼效应——AI与思维模型【84】
  • 组件轮播与样式结构重用实验
  • Android开发——实现一个计算器
  • 中行一季度净赚超543亿降2.9%,利息净收入降逾4%
  • 韩国下届大选执政党初选4进2结果揭晓,金文洙、韩东勋胜出
  • “五一”假期,又有多地将向社会开放政府机关食堂
  • 杭州银行一季度净赚超60亿增逾17%,增速较去年同期有所回落
  • 加拿大驾车撞人事件遇难人数升到11人
  • 财政部下达农业生产防灾救灾资金3.76亿元,支持黄淮海等地抗旱保春播