题意:平面上有N个石头,给出坐标。一只青蛙从1号石头跳到2号石头,使路径上的最长便最短。输出这个值。(2≤N≤200)

解法:最小瓶颈树。而由于这题N比较小便可以用2种方法:
1.最短路径中提到过的Floyd算法,利用DP思想枚举出所有情况,O(n3)。具体关于Floyd算法的一些解释得等我过几天写一篇博文。
2.用Kruskal算法求出最小生成树再求出路径上的最长边权。具体解释见我之前的一篇博文: 关于生成树的拓展 {附【转】最小瓶颈路与次小生成树}(图论--生成树)

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<cmath>
5 #include<iostream>
6 using namespace std;
7
8 const int N=210;
9 const double INF=300010.0;
10 double d[N][N];
11 struct node{int x,y;}a[N];
12
13 double mmin(double x,double y) {return x<y?x:y;}
14 double mmax(double x,double y) {return x>y?x:y;}
15 double dist(int i,int j) {return sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));}
16 int main()
17 {
18 int n,T=0;
19 while (scanf("%d",&n)!=EOF && n)
20 {
21 int i,j,k;
22 for (i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
23 for (i=1;i<=n;i++)
24 for (j=i;j<=n;j++)
25 d[i][j]=d[j][i]=dist(i,j);
26 for (k=1;k<=n;k++)//???
27 for (i=1;i<=n;i++)
28 for (j=1;j<=n;j++)//?i?j????1~k????????????
29 d[i][j]=mmin(d[i][j],mmax(d[i][k],d[k][j]));
30 printf("Scenario #%d\nFrog Distance = %.3lf\n\n",++T,d[1][2]);
31 }
32 }

1

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<cmath>
5 #include<algorithm>
6 #include<iostream>
7 using namespace std;
8
9 const int N=210,M=20010;
10 const double INF=300010.0;
11 int n,m;
12 int fa[N];
13 struct node{int x,y;}a[N];
14 struct edge
15 {
16 int x,y;
17 double d;
18 edge() {}
19 edge(int i,int j,double k) {x=i;y=j;d=k;}
20 }e[M];
21
22 double mmin(double x,double y) {return x<y?x:y;}
23 double mmax(double x,double y) {return x>y?x:y;}
24 bool cmp(edge x,edge y) {return x.d<y.d;}
25 double dist(int i,int j) {return sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));}
26
27 int ffind(int x)
28 {
29 if (fa[x]!=x) fa[x]=ffind(fa[x]);
30 return fa[x];
31 }
32 double Kruskal(int u,int v)
33 {
34 int i;
35 for (i=1;i<=n;i++) fa[i]=i;
36 sort(e+1,e+1+m,cmp);
37 for (i=1;i<=m;i++)
38 {
39 int x=e[i].x,y=e[i].y;
40 int xx=ffind(x),yy=ffind(y);
41 if (xx!=yy)
42 {
43 fa[xx]=yy;
44 //if (x==u||y==u||x==v||y==v)//wrong
45 if (ffind(u)==ffind(v)) return e[i].d;
46 }
47 }
48 }
49 int main()
50 {
51 int T=0;
52 while (scanf("%d",&n)!=EOF && n)
53 {
54 int i,j;
55 for (i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
56 m=0;
57 for (i=1;i<=n;i++)
58 for (j=i+1;j<=n;j++)
59 e[++m]=edge(i,j,dist(i,j));
60 printf("Scenario #%d\nFrog Distance = %.3lf\n\n",++T,Kruskal(1,2));
61 }
62 }

2

P.S.而我之前关于代码2打的超复杂:“乖乖地”跑完一次Kruskal后删边,再建立邻接表,打算Bfs一次......

【uva 534】Frogger(图论--最小瓶颈路 模版题)的更多相关文章

  1. 【bzoj2429】[HAOI2006]聪明的猴子(图论--最小瓶颈生成树 模版题)

    题意:有M只猴子,他们的最大跳跃距离为Ai.树林中有N棵树露出了水面,给出了它们的坐标.问有多少只猴子能在这个地区露出水面的所有树冠上觅食. 解法:由于要尽量多的猴子能到达所有树冠,便用Kruskal ...

  2. UVA 11354 Bond(最小瓶颈路+倍增)

    题意:问图上任意两点(u,v)之间的路径上,所经过的最大边权最小为多少? 求最小瓶颈路,既是求最小生成树.因为要处理多组询问,所以需要用倍增加速. 先处理出最小生成树,prim的时间复杂度为O(n*n ...

  3. 【UVA10816】Travel in Desert (最小瓶颈路+最短路)

    UVA10816 Travel in Desert 题目大意 沙漠中有一些道路,每个道路有一个温度和距离,要求s,t两点间的一条路径,满足温度最大值最小,并且长度最短 输入格式 输入包含多组数据. 每 ...

  4. 最小瓶颈路 Uva 534 Frogger

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

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

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

  6. 【UVA534】Frogger 最小瓶颈路

    题目大意:给定一张 N 个点的完全图,求 1,2 号节点之间的一条最小瓶颈路. 题解:可知,最小瓶颈路一定存在于最小生成树(最小瓶颈树)中.因此,直接跑克鲁斯卡尔算法,当 1,2 号节点在同一个联通块 ...

  7. UVa 11354 邦德(最小瓶颈路+LCA)

    https://vjudge.net/problem/UVA-11354 题意: 有n个城市m条道路,每条道路有一个危险系数.先在有若干个询问,要求找到一条从s到t的路,使得途径所有边的最大危险系数最 ...

  8. UVA 534 - Frogger(kruskal扩展)

    UVA 534 - Frogger 题目链接 题意:给定一些点.如今要求一条路径从第一个点能跳到第二个点,而且这个路径上的最大距离是最小的 思路:利用kruskal算法,每次加最小权值的边进去,推断一 ...

  9. CF600 div2 F.Cheap Robot(思维+最短路+最小瓶颈路)

    最开始啃这题的时候我还是个不会$lca$的人,看代码看的没有一点头绪,现在趁着寒假补了很多关于图论的知识点,回头在看这题还是有很多值得学习的地方. Solution 1 (offline): 原题解: ...

随机推荐

  1. maven 无法导入ojdbc 的jar包 解决方法

    由于maven无法在线安装ojdbc包,所有先在我们需要手动导入. 准备环境: 1.系统需要配置好jdk以及maven环境. 2.ojdbc的jar包,记住jar的路径,我的路径是:E:\jdbc\o ...

  2. python安装whl包时出现的问题解决:is not a supported wheel on this platform

    @ 目录 一.问题 二.查找问题 三.问题解决 一.问题 1.下载一个twisted包 安装Twisted,进入https://www.lfd.uci.edu/~gohlke/pythonlibs 下 ...

  3. servlet+jsp完成简单登录

    将用户在注册界面中的数据填充到数据库相对应的表格中.当用户再次登录时,从数据库中拿到相应的数据查询并与页面的数据做对比,判断是否登陆成功. 需要在HTML文件中将form表单上的action属性值设置 ...

  4. Invalid bound statement (not found): com.xxx.xxx.dao.ShopMapper.insertShop

    mybatis在编写完SQL,进行测试的时候出现了错误,显示 org.apache.ibatis.binding.BindingException: Invalid bound statement ( ...

  5. /etc/hosts导致的问题

    今天安装完成orzdba之后,执行./orzdba -l 报如下错误: Usage: Socket::inet_ntoa(ip_address_sv) at /var/lib/mysql/trunk/ ...

  6. springmvc 字符串转日期格式

    http://www.mamicode.com/info-detail-2485490.html

  7. Java高并发与多线程(四)-----锁

    今天,我们开始Java高并发与多线程的第四篇,锁. 之前的三篇,基本上都是在讲一些概念性和基础性的东西,东西有点零碎,但是像文科科目一样,记住就好了. 但是本篇是高并发里面真正的基石,需要大量的理解和 ...

  8. Windows下nginx设置开机自启动

    第一步:下载 WinSW https://github.com/winsw/winsw/releases/download/v2.10.3/WinSW.NET4.exe 64位系统 https://g ...

  9. 【Android】编译报错 Annotation processors must be explicitly declared now 解决方案

    问题 在网上下载一个demo,因为版本久远,里面添加了本地 Butter Knife 的jar包,在编译时报错 Annotation processors must be explicitly dec ...

  10. pandas高级操作

    pandas高级操作 import numpy as np import pandas as pd from pandas import DataFrame,Series 替换操作 替换操作可以同步作 ...