• 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 }
  • 相关阅读:
    LeetCode 345. Reverse Vowels of a String 题解
    LeetCode 344. Reverse String 题解
    LeetCode 27. Remove Element 题解
    LeetCode 61. Rotate List 题解
    LeetCode 19.Remove Nth Node From End of List 题解
    Android耗电量
    Android 使用adb查看和修改电池信息
    Android AOP AspectJ 插桩
    Flask相关用法
    Monkey日志信息的11种Event percentage
  • 原文地址:https://www.cnblogs.com/yuzhaoxin/p/2621257.html
Copyright © 2020-2023  润新知