hdu_4463(最小生成树)
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(最小生成树)的更多相关文章
- 最小生成树(Kruskal算法-边集数组)
以此图为例: package com.datastruct; import java.util.Scanner; public class TestKruskal { private static c ...
- 最小生成树计数 bzoj 1016
最小生成树计数 (1s 128M) award [问题描述] 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一 ...
- poj 1251 Jungle Roads (最小生成树)
poj 1251 Jungle Roads (最小生成树) Link: http://poj.org/problem?id=1251 Jungle Roads Time Limit: 1000 ...
- 【BZOJ 1016】【JSOI 2008】最小生成树计数
http://www.lydsy.com/JudgeOnline/problem.php?id=1016 统计每一个边权在最小生成树中使用的次数,这个次数在任何一个最小生成树中都是固定的(归纳证明). ...
- 最小生成树---Prim算法和Kruskal算法
Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...
- Delaunay剖分与平面欧几里得距离最小生成树
这个东西代码我是对着Trinkle的写的,所以就不放代码了.. Delaunay剖分的定义: 一个三角剖分是Delaunay的当且仅当其中的每个三角形的外接圆内部(不包括边界)都没有点. 它的存在性是 ...
- 最小生成树(prim&kruskal)
最近都是图,为了防止几次记不住,先把自己理解的写下来,有问题继续改.先把算法过程记下来: prime算法: 原始的加权连通图——————D被选作起点,选与之相连的权值 ...
- 最小生成树 prime poj1258
题意:给你一个矩阵M[i][j]表示i到j的距离 求最小生成树 思路:裸最小生成树 prime就可以了 最小生成树专题 AC代码: #include "iostream" #inc ...
- 最小生成树 prime + 队列优化
存图方式 最小生成树prime+队列优化 优化后时间复杂度是O(m*lgm) m为边数 优化后简直神速,应该说对于绝大多数的题目来说都够用了 具体有多快呢 请参照这篇博客:堆排序 Heapsort / ...
随机推荐
- iOS动态性 运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
借助前辈的力量综合一下资料. OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类.对象中的所有属性.方法,就算是 ...
- PDO绑定含IN的SQL语句的参数注意事项
PDOStatement::bindParam(),表示将PDO::prepare()语句中的占位符用参数替换掉.注意,在绑定含有IN的SQL多参数语句时要额外小心,比如$stmt = $db-> ...
- vs2015企业版密钥
专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2 企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV
- canvas学习api
1.canvas.getContext():获取渲染上下文和绘画功能: 一.绘制矩形 2.ctx.fillRect(x,y,width,height):绘制矩形: 3.ctx.strokeRect(x ...
- 从源码(编译)安装golang
从源码安装golang 通常情况下,安装go只需要在官网(https://golang.org/dl/)下载适合系统的二进制发布包,按照安装说明进行安装即可. 对于Linux, Mac OS X和Fr ...
- Spark源码剖析(八):stage划分原理与源码剖析
引言 对于Spark开发人员来说,了解stage的划分算法可以让你知道自己编写的spark application被划分为几个job,每个job被划分为几个stage,每个stage包括了你的哪些代码 ...
- leetcode — linked-list-cycle
/** * Source : https://oj.leetcode.com/problems/linked-list-cycle/ * * Given a linked list, determin ...
- 关于 Python 入门的一些问题?
一.用 python 能够做什么?解决什么问题? A1:理论上来说,计算机能做什么,python 语言就能让它做什么,也即 python能做什么. 数值计算.机器学习.爬虫.云相关开发.自动化测试.运 ...
- css3弹性盒模型flex快速入门与上手(align-content与align-items)
接着上文css3弹性盒模型flex快速入门与上手1继续,上文还剩下两个父容器的属性align-items和align-content. 一.align-content:多行的副轴对齐方式 含义 多行的 ...
- 不会PS如何自制简单线条、任意填充色的小图标
最近在做H5的开发中,需要用到一些简单的小图标,百度出来的图片,总是或多或少差了一些颜色.于是准备自己制作图片,PS是不会的,学习以及软件安装太费时,于是就准备用常见的软件来试着做一做. 在尝试了 w ...