Steiner tree
Gym - 101908J Joining Capitals
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = ;
const double INF = 1e12;
pair<int, int> p[MAXN];
double dp[MAXN][ << ], dis[MAXN][MAXN];
int N2(int x) {
return x * x;
}
double get_dis(pair<int, int> a, pair<int, int> b) {
return sqrt(N2(a.first - b.first) + N2(a.second - b.second));
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
for (int i = ; i < n; i++) {
scanf("%d %d", &p[i].first, &p[i].second);
}
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
if (i != j) {
dis[i][j] = get_dis(p[i], p[j]);
}
}
}
for (int i = k; i < n; i++) {
for (int j = ; j < ( << k); j++) {
dp[i][j] = ;
for (int s = ; s < k; s++) {
dp[i][j] += (j >> s & ) * dis[i][s];
}
}
}
for (int S = ; S < ( << k); S++) {
for (int x = k; x < n; x++) {
for (int i = k; i < n; i++) {
if (i != x) {
for (int sub = S; ; sub = (sub - )&S) {
dp[x][S] = min(dp[x][S], dis[i][x] + dp[x][sub] + dp[i][S ^ sub]);
if (!sub) {
break;
}
}
}
}
}
}
double ans = INF;
for (int i = k; i < n; i++) {
ans = min(ans, dp[i][( << k) - ]);
}
printf("%.5f\n", ans);
return ;
}
Steiner tree的更多相关文章
- Minimal Steiner Tree ACM
上图论课的时候无意之间看到了这个,然后花了几天的时间学习了下,接下来做一个总结. 一般斯坦纳树问题是指(来自百度百科): 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种.最小生成树是在 ...
- Java基础常见英语词汇
Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的 ['prəʊɡræmɪŋ]编程 OO: object ...
- ZJOI Day 2 游记
---恢复内容开始--- 去ZJOI Day 2打了一会酱油...各种神犇大爷都来屠,南外的小朋友也来屠我们了真是感动...没有看到毛爷爷真是可惜.. Day[-1] 早上还在上课,吃完中饭立马跑去找 ...
- 【HDOJ】3311 Dig The Wells
Steiner Tree.概念就不讲了,引入0号结点.[1, n+m]到0连一条边,权重表示挖井的费用.这样建图spfa求MST即满足所求解. /* 3311 */ #include <iost ...
- BZOJ 2595: [Wc2008]游览计划 [DP 状压 斯坦纳树 spfa]【学习笔记】
传送门 题意:略 论文 <SPFA算法的优化及应用> http://www.cnblogs.com/lazycal/p/bzoj-2595.html 本题的核心就是求斯坦纳树: Stein ...
- 《清华梦的粉碎》by王垠
清华梦的诞生 小时候,妈妈给我一个梦.她指着一个大哥哥的照片对我说,这是爸爸的学生,他考上了清华大学,他是我们中学的骄傲.长大后,你也要进入清华大学读书,为我们家争光.我不知道清华是什么样子,但是我 ...
- 看到了必须要Mark啊,最全的编程中英文词汇对照汇总(里面有好几个版本的,每个版本从a到d的顺序排列)
java: 第一章: JDK(Java Development Kit) java开发工具包 JVM(Java Virtual Machine) java虚拟机 Javac 编译命令 java ...
- XV Open Cup named after E.V. Pankratiev. GP of Three Capitals
A. Add and Reverse 要么全部都选择$+1$,要么加出高$16$位后翻转位序然后再补充低$16$位. #include<stdio.h> #include<iostr ...
- HDU 6060 17多校3 RXD and dividing(树+dfs)
Problem Description RXD has a tree T, with the size of n. Each edge has a cost.Define f(S) as the th ...
随机推荐
- C语言基础:自定义函数
#include <stdio.h>//声明函数的原型:参数名可以省略 void printRectangle();void printfTriangle();void printhh(l ...
- monkey详解
Monkey是Android系统自带的一个命令行工具,用户主要是通过adb命令来启动Monkey,Monkey在运行时,会根据命令行参数的配置,生成伪随机事件流,并在Android设备上执行对应的测试 ...
- C和C++的静态函数和静态变量
1.C程序的静态变量和函数 引用自:https://blog.csdn.net/thanklife/article/details/78476737 作者:零点零一 C程序一直由下列部分组成 ...
- Vim常用操作集合
基本上 vi/vim 共分为三种模式,分别是一般命令模式(Command mode),编辑模式(Insert mode)和命令行模式(Last line mode). 命令模式: 用户刚刚启动 vi/ ...
- eclipse中出现错误 Syntax error, insert "}" to complete Block
结果原因如下 划红线的地方多出来类似于空格的占位符,也许这样看不清楚. 我们来显示空格.制表符和回车键. Window->Preferences->General->Editors- ...
- python 实现 灰色预测 GM(1,1)模型 灰色系统 预测 灰色预测公式推导
来源公式推导连接 https://blog.csdn.net/qq_36387683/article/details/88554434 关键词:灰色预测 python 实现 灰色预测 GM(1,1)模 ...
- 【VS开发】进程线程及堆栈关系的总结
进程线程及堆栈关系的总结 突然想到进程的栈和线程的栈,就顺便说一下,线程的栈被自动分配到进程的内存空间中 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性. ...
- Windows本地运行调试Spark或Hadoop程序失败:ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path
报错内容 ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path java.io.IOExce ...
- java使用顺序数组实现二叉树
顺序数组实现二叉树 实现原理 对于下标为index的节点其满足 1.左孩子节点的下标为2index+1 2.右孩子节点的下标为2index+2 代码实现 package tree; public cl ...
- 双指针(最大删除子串)Codeforces Round #579 (Div. 3)--Remove the Substring (hard version)
题目链接:https://codeforces.com/contest/1203/problem/D2 题意: 给你S串.T串,问你最长删除多长的子串使得S串里仍然有T的子序列. 思路: 想了好久,先 ...