zoukankan      html  css  js  c++  java
  • poj 2253 Frogger

    这道题我是用并查集处理的,将所有边排序,当生成树里出现第一个点,第二个点时(或第0点第1个点),结束并查集,输出已处理边里的最大值就可以了。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<math.h>
     4 #define MAXN 210
     5 int n,g,h,u[MAXN*MAXN],v[2*MAXN*MAXN],p[MAXN],r[2*MAXN*MAXN];
     6 double x[MAXN],y[MAXN],w[2*MAXN*MAXN],flag[2*MAXN*MAXN];
     7 
     8 int cmp(const void *_p, const void *_q)
     9 {
    10     int *p = (int *)_p;
    11     int *q = (int *)_q;
    12     return w[*p]>w[*q] ? 1 : -1;
    13 }
    14 int find(int x2){return p[x2] == x2 ? x2 : p[x2] = find(p[x2]);}
    15 void kruskal()
    16 {
    17     double ans = -1;
    18     int ok1 = 0, ok2 = 0;
    19     for(int i = 0; i < n; i ++) p[i] = i;
    20     for(int i = 0; i < h; i ++) r[i] = i;
    21     qsort(r,h,sizeof(r[0]),cmp);
    22     g = 0;
    23     for(int i = 0; i < h; i ++)
    24     {
    25         int e = r[i];
    26         int x1 = find(u[e]), y1 = find(v[e]);
    27         if(find(0) == find(1))break;
    28         if(x1 != y1)
    29         {
    30             p[x1] = y1;
    31             flag[g ++] = w[e];
    32          }
    33     }
    34     for(int i = 0; i < g; i ++)
    35     {
    36         if(flag[i] > ans) ans = flag[i];
    37     }
    38     printf("Frog Distance = %.3f\n\n",ans);
    39 }
    40 void init()
    41 {
    42     int num = 1;
    43     while(~scanf("%d",&n))
    44     {
    45         if(n == 0) break;
    46         for(int i = 0; i < n; i ++)
    47             scanf("%lf%lf",&x[i], &y[i]);
    48         h = 0;
    49         for(int i = 0; i < n; i ++)
    50             for(int j = i+1; j < n; j ++)
    51             {
    52                 double dis = sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
    53                 u[h] = i, v[h] = j, w[h++] = dis;
    54                 u[h] = j; v[h] = i, w[h++] = dis;
    55             }
    56             printf("Scenario #%d\n",num++);
    57         kruskal();    
    58     }    
    59 }
    60 
    61 int main()
    62 {
    63     init();
    64     return 0;
    65 }
  • 相关阅读:
    Maven常用命令
    JUnit注解与hamcrest
    Maven发布工程到私服和JUnit的安装使用
    -Java- Maven命令
    -Java基础-构造器
    Maven命令与pom文件常量
    Maven聚合模块与继承和Maven的生命周期
    BigDecimal
    垃圾000000000000000000000写了很多,保存不上,发送失败了。。。。。A
    自己把源码生成jar,在android项目中调用
  • 原文地址:https://www.cnblogs.com/yuzhaoxin/p/2621257.html
Copyright © 2011-2022 走看看