uva 10803(floyd)
2013-12-11 23:03
351 查看
题意:这道题题有点坑一开始没看懂什么叫最坏情况。其实就是任意两点之中距离最大的,就是最坏情况。
思路:floyd模版题,ps:竟然这次写跪了然后调试了半天T。T真是忧伤。。。
首先根据给的点建图然后在建图过程中滤去>10的边。然后floyd,接着判断一下连通性,不连通直接输出Send Kurdy。否则输出最大值。
这道题写的有点烦了。。。就不改了直接贴上来了。见谅
代码如下:
View Code
思路:floyd模版题,ps:竟然这次写跪了然后调试了半天T。T真是忧伤。。。
首先根据给的点建图然后在建图过程中滤去>10的边。然后floyd,接着判断一下连通性,不连通直接输出Send Kurdy。否则输出最大值。
这道题写的有点烦了。。。就不改了直接贴上来了。见谅
代码如下:
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <utility> #include <queue> #include <stack> #include <vector> #define LEN 110 #define INF -10001 #define eps 1E-10 using namespace std; typedef pair<double, double> pdd; int n ,cnt = 1; pdd p[LEN]; double Map[LEN][LEN], dd[LEN][LEN]; inline double dis(pdd a, pdd b){return sqrt((a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second));} int parent[LEN]; void init(){for(int i=0; i<LEN; i++)parent[i] = i;} int Find(int x){return parent[x]==x?x:Find(parent[x]);} void Union(int a, int b){int pa=Find(a), pb=Find(b);if(pa!=pb)parent[pa] = pb;} void floyd() { memcpy(dd, Map, sizeof Map); for(int k=1; k<=n; k++){ for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ if(dd[i][j]>dd[i][k]+dd[k][j]){ dd[i][j] = dd[i][k]+dd[k][j]; } } } } } int main() { // freopen("in.txt", "r", stdin); int T; scanf("%d", &T); while(T--){ scanf("%d", &n); for(int i=1; i<=n; i++){ double a, b; scanf("%lf%lf", &a, &b); p[i] = make_pair(a,b); } for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ Map[i][j] = dis(p[i],p[j]); if(Map[i][j]>10)Map[i][j] = -INF; } } floyd(); printf("Case #%d:\n", cnt++); double ans = INF; for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ if(fabs(dd[i][j]+INF)>eps)ans = max(ans, dd[i][j]); } } init(); for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ if(dd[i][j]!=-INF)Union(i,j); } } int f=0; for(int i=1; i<=n; i++)if(parent[i]==i)f++; if(f==1)printf("%.4lf\n\n", ans); else printf("Send Kurdy\n\n"); } return 0; }
View Code
相关文章推荐
- UVA 10803 - Thunder Mountain(floyd)
- uva 10803 Thunder Mountain (floyd)
- UVA10803(最短路floyd )
- Thunder Mountain - UVa 10803 Floyd
- UVa 104 - Arbitrage(Floyd动态规划)
- 最大流,Floyd(UNIX插头 uva 753)
- UVa - 247 - Calling Circles ( Floyd 传递闭包 )
- UVa10793 - The Orc Attack(floyd_warshall)
- 11.3.4-uva10048-floyd变形-两点之间路径上最大边的最小值
- UVa 1001 Say Cheese (Floyd)
- uva 10048 - Audiophobia(floyd 的变形)
- UVA 436 - Arbitrage (II)(floyd)
- uva 247 Calling Circles(Floyd 的简单应用)
- UVA104Arbitrage(floyd最短路)
- UVA 10985 - Rings'n'Ropes(floyd)
- UVa10803 - Thunder Mountain
- uva 821 Page Hopping 最短路floyd
- UVA 10803 Thunder Mountain
- UVA 10803 - Thunder Mountain
- UVa 10048 - Audiophobia 简单Floyd