J. Joining Capitals(斯坦纳树变形)
发布日期:2021-06-30 10:32:48
浏览次数:2
分类:技术文章
本文共 1091 字,大约阅读时间需要 3 分钟。
假如没有特殊点只能连出一条边的限制就是个裸的斯坦纳树了
斯坦纳树有两个转移,其中转移
f [ i ] [ s ] = min { f [ i ] [ s u b ] + f [ i ] [ s u b ⊕ s ] } f[i][s]=\min\{f[i][sub]+f[i][sub\oplus s]\} f[i][s]=min{ f[i][sub]+f[i][sub⊕s]}
这就是合并两个子树,所以我们不对特殊点做这个转移即可
#includeusing namespace std;const int maxn = 1e4+10;const int inf = 1e9;double x[maxn],y[maxn];double f[maxn][1<<11];int vis[maxn],n,k;struct edge{ int to,nxt; double w;}d[maxn]; int head[maxn],cnt=1;void add(int u,int v,double w){ d[++cnt] = ( edge ){ v,head[u],w},head[u] = cnt;}double di(int i,int j){ return sqrt( ( y[i]-y[j] )*(y[i]-y[j] )+( x[i]-x[j] )*(x[i]-x[j]) );}queue q;void spfa(int s){ while( !q.empty() ) { int u = q.front(); q.pop(); vis[u] = 0; for(int i=head[u];i;i=d[i].nxt ) { int v = d[i].to; if( f[v][s]>f[u][s]+d[i].w ) { f[v][s] = f[u][s]+d[i].w; if( !vis[v] ) q.push( v ),vis[v] = 1; } } }}int main(){ cin >> n >> k; for(int i=1;i<=n;i++) cin >> x[i] >> y[i]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if( i!=j ) add( i,j,di(i,j) ); for(int i=0;i<=n;i++) for(int j=0;j<=(1<
转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/116330944 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月20日 05时01分06秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Impala支持Google云存储开发笔记
2019-04-30
如何在Apache JIRA中搜索issue
2019-04-30
scrapy 排错记录
2019-04-30
ACM路上的一大失误
2019-04-30
HDOJ2049 不容易系列之(4)——考新郎
2019-04-30
CodeForces 248B - Chilly Willy - 找规律
2019-04-30
POJ-2418 Hardwood Species(Trie树)(map)
2019-04-30
HDU-4300 Clairewd’s message + 4333(扩展KMP)
2019-04-30
HDU 1592 Half of and a Half(高精度)
2019-04-30
POJ-3304 Segments(计算几何)
2019-04-30
UVA-11538 Chess Queen(数学)
2019-04-30
UVA-11401 Triangle Counting(数学优化)
2019-04-30
Codeforces Round #369 (Div. 2)
2019-04-30
UVA 11426 GCD - Extreme (II)(欧拉函数)
2019-04-30
HDU-2838 Cow Sorting(树状数组)
2019-04-30
POJ-2299 Ultra-QuickSort(树状数组)(离散化)
2019-04-30
基于SSM的兼职论坛系统的设计与实现
2019-04-30
基于java的图书管理系统的设计与实现
2019-04-30