hdu_4463(最小生成树)

标签: 并查集


题目链接

  • 题意: 求一个必须包含一条路径的最小生成树
  • 题解: 把那条边初始化成0 保证这条边一定会被选
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 50;
double x[N],y[N];
struct Edge{
int from;
int to;
double dis;
bool operator <(const Edge e) const
{
return dis<e.dis;
}
}edge[N*N]; double aabs(double a)
{
if(a<0) return -a;
else return a;
}
int fa[N];
int Ecnt;
int Getfa(int x){
return (fa[x]==x)?x:fa[x] = Getfa(fa[x]);
} int main()
{
int n;
while(~scanf("%d",&n),n)
{
Ecnt = 0;
int s,t;
scanf("%d%d",&s,&t);
for(int i = 1; i <= n; i++){
scanf("%lf %lf",&x[i],&y[i]);
}
double tm;
for(int i = 1; i <= n; i++){
for(int j = 1; j < i; j++){
if(i==s&&j==t) {
edge[Ecnt].from = i;
edge[Ecnt].to = j;
edge[Ecnt++].dis = 0;
tm = sqrt(aabs(x[i]-x[j])*aabs(x[i]-x[j])+aabs(y[i]-y[j])*aabs(y[i]-y[j]));
edge[Ecnt].from = j;
edge[Ecnt].to = i;
edge[Ecnt++].dis = 0;
continue;
}
else if(i==t&&j==s){
edge[Ecnt].from = i;
edge[Ecnt].to = j;
edge[Ecnt++].dis = 0;
tm = sqrt(aabs(x[i]-x[j])*aabs(x[i]-x[j])+aabs(y[i]-y[j])*aabs(y[i]-y[j]));
edge[Ecnt].from = j;
edge[Ecnt].to = i;
edge[Ecnt++].dis = 0;
continue;
}
edge[Ecnt].from = i;
edge[Ecnt].to = j;
edge[Ecnt++].dis = sqrt(aabs(x[i]-x[j])*aabs(x[i]-x[j])+aabs(y[i]-y[j])*aabs(y[i]-y[j]));
edge[Ecnt].from = j;
edge[Ecnt].to = i;
edge[Ecnt++].dis = sqrt(aabs(x[i]-x[j])*aabs(x[i]-x[j])+aabs(y[i]-y[j])*aabs(y[i]-y[j]));
}
}
sort(edge,edge+Ecnt);
double ans = 0;
for(int i = 1; i <= n ;i++) fa[i] = i;
int cnt = 0;
for(int i = 0; i < Ecnt; i++){
int X = Getfa(edge[i].from);
int Y = Getfa(edge[i].to);
if(X!=Y){
cnt++;
ans += edge[i].dis;
fa[Y] = X;
if(cnt==n-1){
break;
}
}
}
ans+=tm;
printf("%.2lf\n",ans);
}
return 0;
}

hdu_4463(最小生成树)的更多相关文章

  1. 最小生成树(Kruskal算法-边集数组)

    以此图为例: package com.datastruct; import java.util.Scanner; public class TestKruskal { private static c ...

  2. 最小生成树计数 bzoj 1016

    最小生成树计数 (1s 128M) award [问题描述] 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一 ...

  3. poj 1251 Jungle Roads (最小生成树)

    poj   1251  Jungle Roads  (最小生成树) Link: http://poj.org/problem?id=1251 Jungle Roads Time Limit: 1000 ...

  4. 【BZOJ 1016】【JSOI 2008】最小生成树计数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1016 统计每一个边权在最小生成树中使用的次数,这个次数在任何一个最小生成树中都是固定的(归纳证明). ...

  5. 最小生成树---Prim算法和Kruskal算法

    Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...

  6. Delaunay剖分与平面欧几里得距离最小生成树

    这个东西代码我是对着Trinkle的写的,所以就不放代码了.. Delaunay剖分的定义: 一个三角剖分是Delaunay的当且仅当其中的每个三角形的外接圆内部(不包括边界)都没有点. 它的存在性是 ...

  7. 最小生成树(prim&kruskal)

    最近都是图,为了防止几次记不住,先把自己理解的写下来,有问题继续改.先把算法过程记下来: prime算法:                  原始的加权连通图——————D被选作起点,选与之相连的权值 ...

  8. 最小生成树 prime poj1258

    题意:给你一个矩阵M[i][j]表示i到j的距离 求最小生成树 思路:裸最小生成树 prime就可以了 最小生成树专题 AC代码: #include "iostream" #inc ...

  9. 最小生成树 prime + 队列优化

    存图方式 最小生成树prime+队列优化 优化后时间复杂度是O(m*lgm) m为边数 优化后简直神速,应该说对于绝大多数的题目来说都够用了 具体有多快呢 请参照这篇博客:堆排序 Heapsort / ...

随机推荐

  1. HTTP协议------->资源和URL

    1.前言 最近在研究http,希望结合书本,对网上资料进行整合,用“人话”聊聊这个玩意儿- 计划用近十篇文章,详尽的说清楚以下一些问题: URL和资源.HTTP报文是什么东西? HTTP是怎样进行链接 ...

  2. Winccflexable触摸屏的报警

    1.报警的分类 2.自定义报警分类 3.报警组成 4.Winccflexable中预定义的报警类别 5.报警的确认 6.WinccFlexable报警的显示 1)报警视图 2)报警窗口 3).报警指示 ...

  3. Pashmak and Flowers

    Pashmak decided to give Parmida a pair of flowers from the garden. There are nflowers in the garden ...

  4. SET与SPLIT

    所以说不要以为前一天考了什么后一天就不会考这类的东西了 出题人总是能竭尽所能 打破你的下限qaq naive split 详解blog来自ljz大佬:http://blog.csdn.net/ljz_ ...

  5. js怎么防止变量冲突

    [1]工程师甲编写功能A ? 1 2 3 var a = 1; var b = 2; alert(a+b);//3 [2]工程师乙添加新功能B ? 1 2 3 var a = 2; var b = 1 ...

  6. JavaScript的DOM编程--10--删除节点

    1). removeChild(): 从一个给定元素里删除一个子节点 var reference = element.removeChild(node); 返回值是一个指向已被删除的子节点的引用指针. ...

  7. 微信小程序开发教程目录

    本系列教程是自己在工作中使用到而记录的,没有顺序之分 如有错误之处,请给与指正,也不希望误导了别人 微信小程序开发教程目录 微信小程序之注册和入门 微信小程序之HTTPS请求 微信小程序开发之选项卡 ...

  8. SQLSERVER 远程登录18456错误

    此文为转载:   我是这么解决的: 1.以windows验证模式进入数据库管理器. 第二步:右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码(改成个好记的).把强制实施密码策略去掉. 第三 ...

  9. Jenkins 学习笔记(三):我们的JAVA 项目是这么发布的

    发布拓扑 1. 拓扑图 2. 流程说明: Git 插件从 Git Server 上面拉取源代码. Maven 插件将源代码安装我们设定的指令进行编译打包,存放于项目的 WorkSpace. Publi ...

  10. linux socket编程:简易客户端与服务端

    什么是socket? socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来 ...