zoukankan      html  css  js  c++  java
  • UvaOJ10369

     1 /*
     2     The first line of each test case contains 1 <= S <= 100, the number of satellite channels!
     3     注意:S表示一共有多少个卫星,那么就是有 最多有S-1个通道! 然后将最小生成树中的后边的 S-1通道去掉就行了! 
     4     思路:最小生成树中的第 k 个最小边! 
     5 */
     6 //克鲁斯克尔算法.....
     7 #include<iostream>
     8 #include<cstdio>
     9 #include<cstring>
    10 #include<algorithm>
    11 #include<cmath>
    12 using namespace std;
    13 
    14 double x[800], y[800];
    15 
    16 struct node{
    17    int u, v; 
    18    double d;
    19 };
    20 
    21 bool cmp(node a, node b){
    22     return a.d < b.d;
    23 }
    24 
    25 int f[505];
    26 
    27 node nd[150000];
    28 double ret[505];
    29 
    30 int getFather(int x){
    31    return x==f[x] ? x : f[x]=getFather(f[x]);
    32 }
    33 
    34 bool Union(int a, int b){
    35    int fa=getFather(a), fb=getFather(b);
    36    if(fa!=fb){
    37        f[fa]=fb;
    38        return true;
    39    }
    40    return false;
    41 }
    42 
    43 int main(){
    44    int n, m;
    45    int t;
    46    scanf("%d", &t);
    47    while(t--){
    48           scanf("%d%d", &m, &n);
    49        for(int i=1; i<=n; ++i){
    50           scanf("%lf%lf", &x[i], &y[i]);
    51           f[i]=i;
    52        }
    53        int cnt=0;
    54        for(int i=1; i<n; ++i)
    55           for(int j=i+1; j<=n; ++j){
    56               nd[cnt].u=i;
    57               nd[cnt].v=j;
    58               nd[cnt++].d=sqrt( (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
    59           }
    60        sort(nd, nd+cnt, cmp);
    61        int cc=0;
    62        for(int i=0; i<cnt; ++i)
    63           if(Union(nd[i].u, nd[i].v))
    64              ret[cc++]=nd[i].d;
    65         for(int i=0; i<cc; ++i)
    66            cout<<ret[i]<<"fdsf"<<endl;
    67        printf("%.2lf
    ", ret[n-m-1]);
    68    }
    69    return 0;
    70 }   

     1 //prim算法.......
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<algorithm>
     6 #include<cmath>
     7 using namespace std;
     8 const double INF = 0x3f3f3f3f*1.0;
     9 double x[800], y[800];
    10 
    11 int n, m;
    12 double map[505][505];
    13 int vis[505];
    14 
    15 double ret[505];
    16 
    17 void prim(){
    18     memset(vis, 0, sizeof(vis));
    19     vis[1]=1;
    20     for(int i=2; i<=n; ++i)
    21        ret[i]=INF;
    22     int root=1, p;
    23     for(int i=1; i<n; ++i){
    24         double minLen=INF; 
    25         for(int j=2; j<=n; ++j){
    26            if(!vis[j] && ret[j]>map[root][j])
    27               ret[j]=map[root][j];
    28            if(!vis[j] && minLen>ret[j]){
    29               minLen=ret[j];
    30               p=j; 
    31            }
    32         }
    33         root=p;
    34         vis[root]=1;
    35     }
    36 }
    37 
    38 int main(){
    39    
    40    int t;
    41    scanf("%d", &t);
    42    while(t--){
    43           scanf("%d%d", &m, &n);
    44        for(int i=1; i<=n; ++i)
    45           scanf("%lf%lf", &x[i], &y[i]);
    46        for(int i=1; i<n; ++i)
    47           for(int j=i+1; j<=n; ++j)
    48              map[i][j]=map[j][i]=sqrt( (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
    49 
    50        prim();
    51        sort(ret, ret+n+1);
    52        
    53        printf("%.2lf
    ", ret[n-m+1]);
    54    }
    55    return 0;
    56 }
  • 相关阅读:
    selenium1-安装
    jmeter9-图形监控
    InetAddress.getLocalHost().getHostAddress() 在macOS里面反应很慢
    自定义实现简易定时任务
    Redis性能监控
    Linux启动进程、线程数量查看及修改方式
    jmeter处理request和response
    centos安装netdata
    scp使用expect自动输入密码
    Linux系统下生成TPS,ResponseTime曲线图
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3899428.html
Copyright © 2011-2022 走看看