Codeforces Round 977 (Div. 2)E1 Digital Village (Easy Version)(Floyd,贪心)

news/2024/10/11 3:07:41/

题目链接

Codeforces Round 977 (Div. 2)E1 Digital Village (Easy Version)

思路

首先,我们注意到 n n n的最大值只有 400 400 400

因此,我们可以先用 F l o y d Floyd Floyd算法预处理出任意两座城市之间的最大延迟时间。

之后,我们通过在线操作,每次贪心地选出最优的一个城市,并不断更新答案。

即,我们先选出 k = 1 k=1 k=1时的最优解,之后从剩下的点里面挑出一个能够使 k = 2 k=2 k=2时最优的点,以此类推。

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 4e2 + 5;
const int mod = 998244353;
const int inf = 0x3f3f3f3f3f3f3f3f;
int n, m, p;
void solve()
{cin >> n >> m >> p;vector<int>city(p);for (int &val : city){cin >> val;}vector<vector<int>>dist(n + 1, vector<int>(n + 1, inf));for (int i = 1, u, v, w; i <= m; i++){cin >> u >> v >> w;dist[u][v] = min(dist[u][v], w);dist[v][u] = min(dist[v][u], w);}for (int i = 1; i <= n; i++)dist[i][i] = 0;for (int k = 1; k <= n; k++){for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){dist[i][j] = min(dist[i][j], max(dist[i][k], dist[k][j]));}}}vector<int>ans(n + 1);int sum = inf, idx = -1;for (auto u : city){int res = 0;for (auto v : city){res += dist[u][v];}if (sum >= res){idx = u;sum = res;for (auto v : city){ans[v] = dist[u][v];}}}set<int>st;st.insert(idx);cout << sum << " ";for (int i = 2; i <= n; i++){if (sum == 0){cout << sum << " ";continue;}int maxx = 0;idx = -1;for (auto u : city){if (st.count(u)) continue;int res = 0;for (auto v : city){if (st.count(v)) continue;if (ans[v] > dist[u][v]){res += ans[v] - dist[u][v];}}if (maxx <= res){maxx = res;idx = u;}};st.insert(idx);sum -= maxx;for (auto v : city){if (st.count(v)) continue;ans[v] = min(ans[v], dist[idx][v]);}cout << sum << " ";}cout << endl;
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int test = 1;cin >> test;for (int i = 1; i <= test; i++){solve();}return 0;
}

http://www.ppmy.cn/news/1537238.html

相关文章

Vue.js组件开发:构建可复用、可维护的前端应用

Vue.js作为一个流行的前端框架&#xff0c;以其简洁、高效和灵活的特性赢得了众多开发者的青睐。而组件化开发是Vue.js的核心理念之一&#xff0c;它使得我们能够构建出结构清晰、易于维护的大型应用。本文将深入探讨Vue.js组件开发的各个方面&#xff0c;帮助你掌握组件开发的…

云原生化 - 监控(简约版)

要在程序中暴露指标&#xff0c;并符合 Prometheus 和 Kubernetes 的规范&#xff0c;可以按照以下步骤进行&#xff1a; 1. 选择合适的库 根据你的编程语言选择适合的 Prometheus 客户端库。例如&#xff1a; Go: github.com/prometheus/client_golangJava: io.prometheus:…

【含开题报告+文档+PPT+源码】基于SpringBoot的社区家政服务预约系统设计与实现【包运行成功】

开题报告 社区家政服务是满足居民日常生活需求的重要组成部分&#xff0c;在现代社会中发挥着越来越重要的作用。随着城市化进程的不断加速&#xff0c;社区家政服务需求量呈现持续增长的趋势。然而&#xff0c;传统的家政服务模式存在一些问题&#xff0c;如预约流程繁琐、信…

【C++网络编程】(一)Linux平台下TCP客户/服务端程序

文章目录 Linux平台下TCP客户/服务端程序服务端客户端相关头文件介绍 Linux平台下TCP客户/服务端程序 图片来源&#xff1a;https://subingwen.cn/linux/socket/ 下面实现一个Linux平台下TCP客户/服务端程序&#xff1a;客户端向服务器发送&#xff1a;“你好&#xff0c;服务…

TypeScript 泛型程序设计指南

目录 文章目录 目录一、泛型程序设计的概念示例&#xff1a;不使用泛型的函数使用泛型 二、泛型的使用方式函数声明接口声明类声明约束泛型索引类型和约束类型多类型约束 三、应用场景 一、泛型程序设计的概念 泛型程序设计是一种程序设计语言风格或范式&#xff0c;它允许开发…

【Iceberg分析】Spark与Iceberg集成落地实践(一)

Spark与Iceberg集成落地实践&#xff08;一&#xff09; 文章目录 Spark与Iceberg集成落地实践&#xff08;一&#xff09;清理快照与元数据配置表维度自动清理元数据文件属性SPARK DDL语句作用 手动清理 清理孤岛文件合并数据文件可用配置rewriteDataFiles核心类图 清理快照与…

前端页面模块修改成可动态生成数据模块——大部分数据为GPT生成(仅供学习参考)

前端页面模块修改成可动态生成数据模块&#xff1a; 这些案例展示了如何通过Blade模板将前端页面模块变成可动态生成的模板。通过巧妙使用Blade语法、控制结构、CSS/JS分离、组件复用等技巧&#xff0c;可以大大提高代码的灵活性和复用性。在Laravel的Controller中准备好数据并…