zoukankan      html  css  js  c++  java
  • 畅通工程再续---hdu1875

    http://acm.hdu.edu.cn/showproblem.php?pid=1875

    把已知的坐标转化为点与点的距离保存到maps里;

    #include<stdio.h>
    #include<string.h>
    #include<map>
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #define N 110
    #define INF 0xfffffff
    
    using namespace std;
    
    int  vis[N], n;
    double maps[N][N],dist[N];
    
    struct node
    {
        int x,y;
    }a[N];
    
    void Init()
    {
        for(int i=0; i<=n; i++)
        {
            vis[i] = 0;
            dist[i] = INF;
            for(int j=0; j<=n; j++)
            {
                maps[i][j] = INF;
            }
        }
        memset(a,0,sizeof(a));
    }
    
    double Prim(int start)
    {
        double ans = 0;
        for(int i=1; i<=n; i++)
            dist[i] = maps[start][i];
        vis[start] = 1;
        for(int i=1; i<n; i++)
        {
            double Min = INF;
            int index = -1;
            for(int j=1; j<=n; j++)
            {
                if(vis[j]==0 && Min > dist[j])
                    Min = dist[j], index = j;
            }
            if(index == -1) break;
            vis[index] = 1;
            ans += Min;
            for(int j=1; j<=n; j++)
            {
                if(vis[j]==0 && dist[j] > maps[index][j])
                {
                    dist[j] = maps[index][j];
                }
            }
        }
        return ans;
    }
    
    int main()
    {
        int i, j,  T;
        double ans;
        scanf("%d", &T);
        while(T--)
        {
            scanf("%d", &n);
            Init();
            for(i=1; i<=n; i++)
                scanf("%d%d", &a[i].x, &a[i].y);
            for(i=1; i<=n; i++)
            {
                for( j=1; j<i; j++)
                {
                    int d=(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);
                    if(d>=100 && d<=1000000)
                        maps[i][j] = maps[j][i] = sqrt(d);
                }
            }
            ans = Prim(1);
            if(ans == 0)
                printf("oh!
    ");
            else
                printf("%.1lf
    ", ans*100);
        }
        return 0;
    }
  • 相关阅读:
    WPF元素之间的关系
    依赖属性
    多线程显示运行状态
    WPF 基本知识
    SQL 这个删除重复行怎么做
    路由事件
    WPF的数据邦定
    SQL对表中XML列的查询
    WMI访问注册表读取系统信息
    创建第一个WPF应用程序
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4680230.html
Copyright © 2011-2022 走看看