标签:follow 最短路 优化 mem unsigned algorithm 数据 scanf style
Input
Output
Sample Input
2 0 0 3 4 3 17 4 19 4 18 5 0
Sample Output
Scenario #1 Frog Distance = 5.000 Scenario #2 Frog Distance = 1.414
#include<cstdio> #include<string> #include<cstdlib> #include<cmath> #include<iostream> #include<cstring> #include<set> #include<queue> #include<algorithm> #include<vector> #include<map> #include<cctype> #include<stack> #include<sstream> #include<list> #include<assert.h> #include<bitset> #include<numeric> #define debug() puts("++++") #define gcd(a,b) __gcd(a,b) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define fi first #define se second #define pb push_back #define sqr(x) ((x)*(x)) #define ms(a,b) memset(a,b,sizeof(a)) #define sz size() #define be begin() #define mp make_pair #define pu push_up #define pd push_down #define cl clear() #define lowbit(x) -x&x #define all 1,n,1 #define rep(i,x,n) for(int i=(x); i<=(n); i++) #define in freopen("in.in","r",stdin) #define out freopen("out.out","w",stdout) using namespace std; typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int> P; const int INF = 0x3f3f3f3f; const LL LNF = 1e18; const int maxn = 50000+20; const int maxm = 1e6 + 10; const double PI = acos(-1.0); const double eps = 1e-8; const int dx[] = {-1,1,0,0,1,1,-1,-1}; const int dy[] = {0,0,1,-1,1,-1,1,-1}; int dir[4][2] = {{0,1},{0,-1},{-1,0},{1,0}}; const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; double dp[500][500]; int t,n; int x[500],y[500]; void floyd() { for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { dp[i][j] = min(dp[i][j], max(dp[i][k],dp[j][k])); } } } } int main() { int ca=1; while(~scanf("%d",&n),n) { for(int i=1;i<=n;i++) { scanf("%d%d",&x[i],&y[i]); } rep(i,1,n) rep(j,i+1,n) dp[i][j]=dp[j][i]=sqrt(double(sqr(x[i]-x[j]))+double(sqr(y[i]-y[j]))); floyd(); printf("Scenario #%d\nFrog Distance = %.3f\n\n",ca++,dp[1][2]); } } /* 【题意】 有两只青蛙和若干块石头,现在已知这些东西的坐标,两只青蛙A坐标和青蛙B坐标是第一个和第二个坐标,现在A青蛙想要到B青蛙那里去,并且A青蛙可以借助任意石头的跳跃,而从A到B有若干通路,问从A到B的所有通路上的最大边,比如有两条通路 1(4)5 (3)2 代表1到5之间的边为4, 5到2之间的边为3,那么该条通路跳跃范围(两块石头之间的最大距离)为 4, 另一条通路 1(6) 4(1) 2 ,该条通路的跳跃范围为6, 两条通路的跳跃范围分别是 4 ,6,我们要求的就是最小的那一个跳跃范围,即4 【类型】 最短路/最大边最小的最小瓶颈生成树 【分析】 最短路松弛的时候条件变一下就可以了。 【时间复杂度&&优化】 【trick】 【数据】 */
POJ 2253 Frogger【最短路变形/kruskal/A到B多条路径中的最小的最长边】
标签:follow 最短路 优化 mem unsigned algorithm 数据 scanf style
原文地址:https://www.cnblogs.com/Roni-i/p/9442392.html