题意:平面上有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. NOIP初赛篇——09原码、反码和补码

    一.数的原码.补码和反码表示 机器数和真值 ​ 在计算机中,表示数值的数字符号只有0和1两个数码,我们规定最高位为符号位,并用0表示正符号,用1表示负符号.这样,机器中的数值和符号全"数码化 ...

  2. 【Java基础】面向对象上

    面向对象上 这一章主要涉及 Java 类及类的成员,包括属性.方法.构造器:代码块.内部类. 面向过程与面向对象 面向过程(Procedure Oriented Programming,POP)与面向 ...

  3. 2019 Java开发利器Intellij IDEA安装、配置和使用

    进入Intellij IDEA的官网,选择电脑对应的合适版本进行下载,这儿我选择的是Intellij IDEA的社区版,安装旗舰版可去网上找相应的教程. Intellij IDEA的官网:https: ...

  4. [翻译]Azure 网关迁移至 .NET Core 3.1 性能提升一倍

    原文:[Azure Active Directory's gateway is on .NET Core 3.1!] Azure Active Directory 的网关服务是一个反向代理,它为构成 ...

  5. 【Linux】cp命令的各种妙用

    CP 功能: 复制文件或目录 说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中.若同时指定多个文件 ...

  6. CyNix-lxd提权

    0x01 信息收集 nmap -p- -T5 192.168.43.155扫描开放端口 nmap -sV -p 80,6688 -A 192.168.43.155 -oA cynix扫描指定端口 go ...

  7. Docker Hub公共镜像仓库的使用

    创建账号并登陆这里是登陆入口 登陆账号 登陆进入之后里面目前仓库,现在去创建一个 下面我选的是公共仓库,别人也可以访问到 在服务器上登陆进来,进行上传镜像到仓库 [root@docker ~]# do ...

  8. web dynpro配置注意事项

    如果你想使用web dynpro 开发的应用,但是发现浏览器报错,那么你按照下面的步骤逐一进行检查吧.特别是返回的500错误,或者是你发现浏览器的地址栏中以http://<hostname> ...

  9. SAP IDES登陆的short dump终于不见了

    还记得这个IDES登陆的shortdump吗今天对内核从701_rel 升级到721,发现登陆的错误没了,看来721_rel内核支持的操作系统和数据库更多了,兼容性也更好了.

  10. BDC应用

    第一步:SHDB或者是SM35进入BDC录制事务.开始录制. 第二部:保存录制的记录. 第三步:在你自己的程序中定义一个内表如:ITAB TYPE TABLE OF BDCDATA. 再定义一个工作空 ...