TopCoder SRM 710 Div2 Hard MinMaxMax Floyd最短路变形
题意:
有一个无向连通图,没有重边没有自环,并给出顶点的权值和边的权值
定义一条路径\(difficulty\)值为该路径上最大的点权乘上最大的边权
定义函数\(d(i,j)\)为\(i,j\)之间的所有中路径最小的\(difficulty\)值
求\(\sum_{i<j}d(i,j)\)
分析:
令\(minw(i,j)\)表示\(i,j\)之间的路径中最大边权的最小值
按照点权从小到大枚举点\(k\),然后按照Floyd算法那样逐个去更新:
\]
\]
#define REP(i, a, b) for(int i = a; i < b; i++)
#define SZ(a) ((int)a.size())
#define ALL(a) a.begin(), a.end()
typedef long long LL;
const LL INF = 1LL << 60;
typedef pair<int, int> PII;
const int maxn = 300 + 10;
LL minw[maxn][maxn], ans[maxn][maxn];
vector<PII> vertex;
class MinMaxMax {
public:
long long findMin(vector<int> a, vector<int> b, vector<int> w, vector<int> v) {
int n = SZ(v), m = SZ(a);
REP(i, 0, n) REP(j, 0, n) minw[i][j] = ans[i][j] = INF;
REP(i, 0, m) minw[a[i]][b[i]] = minw[b[i]][a[i]] = w[i];
REP(i, 0, n) vertex.emplace_back(v[i], i);
sort(ALL(vertex));
for(PII x : vertex) {
int k = x.second;
REP(i, 0, n) REP(j, 0, n) if(i != j) {
minw[i][j] = min(minw[i][j], max(minw[i][k], minw[k][j]));
if(minw[i][j] == INF) continue;
ans[i][j] = min(ans[i][j], minw[i][j] * max(v[i], max(v[j], v[k])));
}
}
LL res = 0;
REP(i, 0, n) REP(j, 0, i) res += ans[i][j];
return res;
}
};
TopCoder SRM 710 Div2 Hard MinMaxMax Floyd最短路变形的更多相关文章
- Topcoder Srm 673 Div2 1000 BearPermutations2
\(>Topcoder \space Srm \space 673 \space Div2 \space 1000 \space BearPermutations2<\) 题目大意 : 对 ...
- Topcoder Srm 671 Div2 1000 BearDestroysDiv2
\(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...
- 求拓扑排序的数量,例题 topcoder srm 654 div2 500
周赛时遇到的一道比较有意思的题目: Problem Statement There are N rooms in Maki's new house. The rooms are number ...
- Topcoder srm 632 div2
脑洞太大,简单东西就是想复杂,活该一直DIV2; A:水,基本判断A[I]<=A[I-1],ANS++; B:不知道别人怎么做的,我的是100*N*N;没办法想的太多了,忘记是连续的数列 我们枚 ...
- topcoder SRM 628 DIV2 BracketExpressions
先用dfs搜索所有的情况,然后判断每种情况是不是括号匹配 #include <vector> #include <string> #include <list> # ...
- topcoder SRM 628 DIV2 BishopMove
题目比较简单. 注意看测试用例2,给的提示 Please note that this is the largest possible return value: whenever there is ...
- Topcoder SRM 683 Div2 B
贪心的题,从左向右推过去即可 #include <vector> #include <list> #include <map> #include <set&g ...
- Topcoder SRM 683 Div2 - C
树形Dp的题,根据题意建树. DP[i][0] 表示以i为根节点的树的包含i的时候的所有状态点数的总和 Dp[i][1] 表示包含i结点的状态数目 对于一个子节点v Dp[i][0] = (Dp[v] ...
- Topcoder SRM 626 DIV2 SumOfPower
本题就是求所有连续子数列的和 开始拿到题目还以为求的时数列子集的和,认真看到题目才知道是连续子数列 循环遍历即可 int findSum(vector <int> array) { ; ; ...
随机推荐
- BarCode条形码生成库
一.Barcode生成条形码的类库 二.示例 新建mvc空项目,添加Nuget引用 主要代码 // // GET: /Home/ public FileContentResult Index() { ...
- Java1.7新特性
1.switch语句支持字符串变量 public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) { String typeOf ...
- Java项目性能瓶颈分析及定位(八)——Java线程堆栈分析(五)
对于CPU而言,常见的瓶颈主要有两种:服务器的压力很小,但是CPU的利用率却很高,这样的性能瓶颈相对比较容易定位(好比我只是说了你一句,你就哭了,你的弱点立马就暴露出来了):给服务器施加的压力很大,但 ...
- union和struct的区别之处,在于内存的共享上
首先看看union,在c++中,union可能没有多大用处,在c语言中,可能我们要借助其完成很多巧妙的设计,下面是其一个完整的定义: union UTest { ...
- day004-Map类
1.Map集合概述 Map是一个接口,只要是实现了该接口的类就是一个双列集合. 双列集合就是每次存储元素时需要存储两个元素的集合. 这两个元素称为键值对, Key Value ==>映射关系 特 ...
- word中已删除设置是否显示
我们打开别人发过来的文档时经常会出现如下图所示,其实这个不是文档的异常,只是word设置显示了修订版标记,如果我们需要去除这个,只需要在审阅-修订功能下面选择显示最终版即可(测试用的10版,其 ...
- MSD_radix_sort
一.这次是在上一次尝试基础上进行的,预期是达到上次性能的9倍. MSD的基本手法就是不断切片.每一步都是把整体数据切割成256片,如上图所示,实际情况切片未必均匀,有的slice内可能一个元素也没有. ...
- POJ-2456 Aggressive cows---最大化最小值(也就是求最大值)
题目链接: https://vjudge.net/problem/POJ-2456 题目大意: 有n个牛栏,选m个放进牛,相当于一条线段上有 n 个点,选取 m 个点, 使得相邻点之间的最小距离值最大 ...
- spring使用bean
ApplicationContext 应用上下文,加载Spring 框架配置文件 加载classpath: new ClassPathXmlApplicationContext(“applicatio ...
- miller——rabin
突然发现自己在线性筛素数中有这个,忘了好久: #include<iostream> #include<cstdio> using namespace std; long lon ...