题目连接

https://www.acwing.com/problem/content/description/4243/

http://poj.org/problem?id=2253

思路

思路一(最短路)

我们直接跑一个最短路就好,基本上所有的最短路都可以,然后注意的是我们在做松弛操作的时候,也就是判断是否应该加入我们的优先队列中的时候,我们做的不是一个加上这条边而是和这条边去一个max,也就是如果我们当前正在对起点t,终点j做一个松弛操作,那么我们做的不是dis[j]=max(dis[j],dis[t]+w)而是dis[j]=max(dis[t],w)我们这样就能记录下最长边了,那么现在的dis[i]表示的就是从1开始到i结束的最长边的长度,而不是累计长度

思路二(最小生成树)

其实你发现没有,我们这里要求的问题其实就是让这个图联通的最大长度,那么这不就是最小生成树吗,我们对边进行排序,排完序后我们开始将边不断地加入集合中,最后让这个图联通的这个边自然就是整个连通图的最长距离了,所以我们可以直接通过最小生成树来解决这个问题

代码

最短路代码

#include<bits/stdc++.h>
using namespace std;#define ll long long
#define PII pair<int,int>
const int N = 2e2+10;int dis[N],n;struct Point{int x,y;
}V[N];struct Node{int v,w;
};
vector<Node> E[N];bool vis[N];void DJ(){priority_queue<PII,vector<PII>,greater<PII> > que;que.push({0,1});dis[1] = 0;while(!que.empty()){int w = que.top().first;int t = que.top().second;que.pop();if(vis[t]) continue;vis[t] = true;for(int i = 0,l = E[t].size(); i < l; ++i) {int j = E[t][i].v;int k = E[t][i].w;if(dis[j] > max(dis[t],k)){dis[j] = max(dis[t],k);que.push({dis[j],j});}}}
}inline int get_len(Point a,Point b){return (a.x-b.x) * (a.x-b.x) + (a.y-b.y) * (a.y-b.y);
}void init(){for(int i = 1;i <= n; ++i) E[i].clear(),dis[i] = 0x3f3f3f3f,vis[i] = false;
}int main()
{int t = 1;while(cin>>n,n){init();for(int i = 1;i <= n; ++i) cin>>V[i].x>>V[i].y;for(int i = 1;i <= n; ++i)for(int j = i + 1;j <= n; ++j){int w = get_len(V[i],V[j]);E[i].push_back({j,w});E[j].push_back({i,w});}DJ();cout<<"Scenario #"<<t<<endl;cout<<"Frog Distance = "<<fixed<<setprecision(3) <<(double)sqrt((double)dis[2])<<endl;cout<<endl;t++;}
}

最小生成树

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;const int N = 200+10;
int fa[N * N];int find(int x) {while(x!=fa[x]) x = fa[x];return x;
}void merge(int a,int b) {a = find(a);b = find(b);fa[b] = a;
}struct Node {double x,y;
}a[N];struct edge {int u,v;double len;
};bool cmp(edge A,edge B) {return A.len < B.len;
}
vector<edge> V;
void init() {for(int i = 1,len = N * N;i < len; ++i) {fa[i] = i;}V.clear();
}double get_len(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));
}int main()
{int cnt = 1;int n;while(~scanf("%d",&n)&&n) {init(); for(int i = 1;i <= n; ++i) {scanf("%lf%lf",&a[i].x,&a[i].y);}for(int i = 1;i <= n; ++i) {for(int j = 1;j < i; ++j) {double temp = get_len(i,j);V.push_back({i,j,temp});V.push_back({j,i,temp});}}sort(V.begin(),V.end(),cmp);for(int i = 0,len = V.size();i < len; ++i) {edge E = V[i];int l = E.u,r = E.v;l = find(l),r = find(r);if(l != r) {fa[r] = l;}if(find(1) == find(2)) {printf("Scenario #%d\n",cnt++);printf("Frog Distance = %.3lf\n\n",E.len);break;}}}return 0;
}

AcWing 4240. 青蛙(最短路 or 最小生成树)相关推荐

  1. 【挑战程序设计】- 2.5 图论(最短路、最小生成树)

    2.5 图论(最短路.最小生成树) 文章目录 2.5 图论(最短路.最小生成树) 2.5.1 定义们 2.5.2 图的表示 2.5.3 图的搜索 2.5.4 最短路问题 单源1:bellman-for ...

  2. NOIp 图论算法专题总结 (1):最短路、最小生成树、最近公共祖先

    系列索引: NOIp 图论算法专题总结 (1) NOIp 图论算法专题总结 (2) NOIp 图论算法专题总结 (3) 最短路 Floyd 基本思路:枚举所有点与点的中点,如果从中点走最短,更新两点间 ...

  3. 图论(最短路,最小生成树,并查集)

    本文目录: tarjan算法(判断环) 最小生成树(Kruskal算法) 最小生成树(Prim算法) 优先队列实现dijkstra(最短路) 并查集(求环) floyd(弗洛伊德) (最短路) 判断环 ...

  4. acwing单源最短路的建图模式总结

    .根据边权的范围以及问题求解的需要,最短路问题可以分为以下 4 种情形,分别用不同的算法求解. • 单源最短路径(固定一个顶点为原点,求源点到其他每个顶点 的最短路径) • 1. 边权非负:Dijks ...

  5. 20211123 HDU练习 最短路和最小生成树

    一些模板题,都是dijkstra和prim 第一次写博客就复制黏贴实验报告非常抱歉,下次一定好好写.() 以后自己做的题也会写点题解吧  欢迎找我玩~ HDU Today Time Limit : 1 ...

  6. 【算法入门图论】【模板】拓扑排序|【模板】单源最短路2 |最小生成树

    ✅作者简介:热爱后端语言的大学生,CSDN内容合伙人 ✨精品专栏:C++面向对象

  7. 算法——AcWing算法提高课中代码和题解

    文章目录 第一章 动态规划 (完成情况:64/68) 数字三角形模型 最长上升子序列模型 背包模型 状态机模型 状态压缩DP 区间DP 树形DP 数位DP 单调队列优化DP 斜率优化DP 第二章 搜索 ...

  8. 【图论专题】最小生成树及其简单应用

    整理的算法模板合集: ACM模板 题目列表: 题目 算法 AcWing 1140. 最短网络 prim模板 AcWing 1141. 局域网 kruskal模板 AcWing 1142. 繁忙的都市 ...

  9. CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树

    题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...

最新文章

  1. 家用机器人风口来临,但巨头围猎背后的前景不容乐观
  2. java学习之文件基本操作
  3. mfc窗口右下角如何显示一个三角形图案_大型建筑,如何做到室内外设计元素统一?...
  4. 2013工资新规定,未来的八种人将会被淘汰!
  5. 与C ++中的QML对象进行交互
  6. Spark Streaming(二)Flume
  7. JavaScript 运行机制详解(理解同步、异步和事件循环)
  8. SpringMVC+Maven开发项目源码详细介绍
  9. hadoop深入学习之SequenceFile
  10. 安卓项目R,java文件不能自动更新,clean之后,R.java消失 (转自 Cynosure鱼)
  11. 【元胞自动机】基于matlab元胞自动机交通流仿真【含Matlab源码 827期】
  12. 关于校企合作的一些想法和思路
  13. 螃蟹效应:表现优秀遭嫉妒,如何应对职场竞争?
  14. 初次打开QQ空间后IE卡死问题处理
  15. 闲聊机器人实例三:python实现小姜机器人(检索式chatbot_sentence_vec_by_word_词向量句向量)
  16. 关于ssm框架的外文文献及译文_学术小白应该如何高效阅读文献?
  17. 《设计模式》(博客园精华集)
  18. Strategic game poj1463
  19. Windows 查看文件大小
  20. 花了2小时,搭建了一个物联网项目,值了 ~

热门文章

  1. 机器学习经典损失函数复习:交叉熵(Cross Entropy)和KL散度
  2. 【尚未完成,不建议参考】马氏距离,汉明距离
  3. 深入浅出讲解LDA主题模型(一)
  4. 搜索指定期刊下的领域相关文章
  5. tensorflow 卷积:设定特定卷积核
  6. 【python3.X】python学习中排雷过程^_^
  7. 在Adobe Html5 Extension的使用Nodejs的问题
  8. u3d中如何添加avatar和状态机
  9. 马士兵讲jsp项目--BBS项目分析笔记
  10. 随机获取部分ListObject集合