UVA 534 - Frogger

题目链接

题意:给定一些点。如今要求一条路径从第一个点能跳到第二个点,而且这个路径上的最大距离是最小的

思路:利用kruskal算法,每次加最小权值的边进去,推断一下是否能联通两点,假设能够了,当前权值就是答案复杂度为O(n^2log(n))

可是事实上这题用floyd搞搞O(n^3)也能过啦。

。只是效率就没上面那个方法优了

代码:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; const int N = 205; struct Point {
int x, y;
void read() {
scanf("%d%d", &x, &y);
}
} p[N]; double dis(Point a, Point b) {
int dx = a.x - b.x;
int dy = a.y - b.y;
return sqrt(dx * dx + dy * dy);
} struct Edge {
int u, v;
double d;
Edge() {}
Edge(int u, int v) {
this->u = u;
this->v = v;
d = dis(p[u], p[v]);
}
bool operator < (const Edge& c) const {
return d < c.d;
}
} E[N * N]; int n, en, parent[N]; int find(int x) {
return x == parent[x] ? x : parent[x] = find(parent[x]);
} int main() {
int cas = 0;
while (~scanf("%d", &n) && n) {
en = 0;
for (int i = 0; i < n; i++) {
parent[i] = i;
p[i].read();
for (int j = 0; j < i; j++)
E[en++] = Edge(i, j);
}
sort(E, E + en);
for (int i = 0; i < en; i++) {
int pa = find(E[i].u);
int pb = find(E[i].v);
if (pa != pb)
parent[pa] = pb;
if (find(0) == find(1)) {
printf("Scenario #%d\nFrog Distance = %.3lf\n\n", ++cas, E[i].d);
break;
}
}
}
return 0;
}

UVA 534 - Frogger(kruskal扩展)的更多相关文章

  1. 最小瓶颈路 Uva 534 Frogger

    说明:关于Uva的题目,可以在vjudge上做的,不用到Uva(那个极其慢的)网站去做. 最小瓶颈路:找u到v的一条路径满足最大边权值尽量小 先求最小生成树,然后u到v的路径在树上是唯一的,答案就是这 ...

  2. POJ 2235 Frogger / UVA 534 Frogger /ZOJ 1942 Frogger(图论,最短路径)

    POJ 2235 Frogger / UVA 534 Frogger /ZOJ 1942 Frogger(图论,最短路径) Description Freddy Frog is sitting on ...

  3. 【uva 534】Frogger(图论--最小瓶颈路 模版题)

    题意:平面上有N个石头,给出坐标.一只青蛙从1号石头跳到2号石头,使路径上的最长便最短.输出这个值.(2≤N≤200) 解法:最小瓶颈树.而由于这题N比较小便可以用2种方法:1.最短路径中提到过的Fl ...

  4. UVA 12169 Disgruntled Judge 扩展欧几里得

    /** 题目:UVA 12169 Disgruntled Judge 链接:https://vjudge.net/problem/UVA-12169 题意:原题 思路: a,b范围都在10000以内. ...

  5. UVA 10090 Marbles(扩展欧几里得)

    Marbles Input: standard input Output: standard output I have some (say, n) marbles (small glass ball ...

  6. uva 10034 Freckles (kruskal||prim)

    题目上仅仅给的坐标,没有给出来边的长度,不管是prim算法还是kruskal算法我们都须要知道边的长度来操作. 这道题是浮点数,也没啥大的差别,处理一下就能够了. 有关这两个算法的介绍前面我已经写过了 ...

  7. Connect the Campus (Uva 10397 Prim || Kruskal + 并查集)

    题意:给出n个点的坐标,要把n个点连通,使得总距离最小,可是有m对点已经连接,输入m,和m组a和b,表示a和b两点已经连接. 思路:两种做法.(1)用prim算法时,输入a,b.令mp[a][b]=0 ...

  8. uva 534

    floyd算法 数据量比较小  就简单了~ /************************************************************************* > ...

  9. poj 2253 Frogger【最小生成树变形】【kruskal】

    Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30427   Accepted: 9806 Descript ...

随机推荐

  1. C++界面库

    刚开始用C++做界面的时候,根本不知道怎么用简陋的MFC控件做出比较美观的界面,后来就开始逐渐接触到BCG  Xtreme ToolkitPro v15.0.1,Skin++,等界面库,以及一些网友自 ...

  2. [置顶] getline函数-linux

    头文件: #include <stdio.h> 函数: ssize_t getline(char **lineptr, size_t *n, FILE *stream); eg: ssiz ...

  3. MFC + CxImage 实现自绘半透明按钮

    环境:VS2008 + CxImage btn.h [cpp] view plaincopyprint? #pragma once // CBtn #include "ximage/xima ...

  4. [TroubleShootin]The backup set holds a backup of a database other than the existing &#39;xxdb&#39; database.

     One: he backup set holds a backup of a database other than the existing 'xxdb' database Sometime ...

  5. OC中线程的状态相关

    1.线程的状态NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; ...

  6. C++多继承的好处是增加了弹性和灵活性,Delphi类强迫单继承TObject是为了提供许多强大功能

    要说灵活性,是C++更强.我自己开发已经好几次碰到需要多继承的情况了. 但是Delphi强迫继承TObject,虽然是单继承,但是提供了相当多的强力功能.要说强大,那还是Delphi当仁不让. 摘自& ...

  7. ajax动态加载的图标

    http://www.ajaxload.info/ 这个网站可以动态生成ajax加载样式的小图片,git格式,挺不错推荐给大家

  8. Internet基础

    互联网是什么? Internet是一个互联网,它是将提供不同服务的,使用不同技术的,具有不同功能的物理网络互连起来而形成的. TCP/IP是一个协议集,它对Internet中主机的寻址方式,主机的命名 ...

  9. 执行shell脚本提示“syntax error near unexpected token for((i=0;i&lt;$length;i++))”

    sh脚本例如以下: #!/usr/bin/env bash county="3 4 5 6 7 8 9 10 11 12 16 29 39 44 53 62 72 84 97 115 128 ...

  10. hbase:应用开发

    开发环境: hadoop: hadoop-1.1.2 hbase: hbase-0.94.11-security eclipse:Juno Service Release 2 配置Eclipse 通过 ...