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

ops/2024/10/11 7:04: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/ops/123853.html

相关文章

strstr

strstr函数原型&#xff1a; char *strstr&#xff08;conset char *s, conset char *s2&#xff09;; 功能&#xff1a;在字符串s中查找字符串s2出现的位置 返回值&#xff1a; 成功&#xff1a;返回第一次出现的s2的地址 失败&#xff1a;NULL

springboot第75集:kafka,线程,进程,容器化服务,线程池

消息中间件在异步通信中⽤的最多&#xff0c;很多业务流程中&#xff0c;如果所有步骤都同步进⾏可能会导致核⼼流程耗时⾮常⻓&#xff0c;更重 要的是所有步骤都同步进⾏⼀旦⾮核⼼步骤失败会导致核⼼流程整体失败&#xff0c;因此在很多业务流程中Kafka就充当了异步 通信⻆⾊…

设计模式 - 创建型模式 上(C++版)

设计模式 - 创建型模式 上&#xff08;C版&#xff09; 一、设计模式的七大原则1、开放封闭原则2、单一职责原则3、依赖倒置原则4、接口隔离原则5、里氏替换原则6、合成复用原则7、迪米特法则8、关于设计模式 二、单例模式&#xff08;Singleton Pattern&#xff09;1、懒汉式单…

基于SpringBoot+Vue+MySQL的装修公司管理系统

系统展示 管理员后台界面 员工后台界面 系统背景 随着信息技术的快速发展&#xff0c;装修行业正面临数字化转型的关键时刻。传统的装修管理方式存在信息管理混乱、出错率高、信息安全性差等问题&#xff0c;已无法满足现代市场的需求。因此&#xff0c;开发一套高效、便捷的装…

## jupyter_server

$ conda install -c conda-forge jupyter_server 查看配置文件路径 $ jupyter --pathsconfig:/home/musk/.jupyter/home/musk/anaconda3/etc/jupyter/usr/local/etc/jupyter/etc/jupyter data:/home/musk/.local/share/jupyter/home/musk/anaconda3/share/jupyter/usr/local/s…

iOS 18.0.1 修復 iPhone 16 觸控失靈、訊息過早錄音等問題

上月末不少 iPhone 16、16 Pro 用戶表示自己的螢幕出現了觸摸後突然大面積無法響應的情況&#xff0c;當時我們猜測 Apple 會推出相應的修復更新&#xff0c;如今為解決這個問題而來的 iOS 18.0.1 終於正式上線了。不過在更新日誌中&#xff0c;官方並未說明導致斷觸的具體原因…

2024-10-10 问AI: [AI面试题]激活函数在神经网络中的作用是什么?

文心一言 激活函数在神经网络中扮演着至关重要的角色。它们的主要作用包括&#xff1a; 引入非线性&#xff1a; 神经网络中的每一层通常是由线性变换&#xff08;如权重矩阵乘以输入向量再加上偏置&#xff09;构成的。如果没有激活函数&#xff0c;多层神经网络将仅仅是一个…

Jmeter分布式测试的注意事项和常见问题

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Jmeter是一款开源的性能测试工具&#xff0c;使用Jmeter进行分布式测试时&#xff0c;也需要注意一些细节和问题&#xff0c;否则可能会影响测试结果的准确性和…