zoukankan      html  css  js  c++  java
  • 【杭电】[1875]畅通工程再续

    这里写图片描述
    这里写图片描述

    这一题也是做的不容易……
    思路是把坐标再计算回每一个点对应的边长

    不过这一题的限制条件确实给我带来了不小的麻烦……毕竟运用还不熟练,而且自己采用的写法是一个比较精简的……导致根据题意修改无从下手,不过坚持自己硬憋……总算是找到了突破口……

    一是对于距离的限制
    这个在进行更新离树最近距离时加入判断
    二是到最后是否成树
    根据上一个<一>中的这种判断
    那么会导致在sum+=时有可能加上inf
    那么也就是说,当有可能加上inf时
    也便是寻找了所有可能边都未成树
    所以可以break 进行输出

    成功AC……
    要猝死的节奏……

    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    struct xy {
        int x,y;
    } a[120];
    int main() {
        double dis[120];
        double e[120][120];
        bool flag[120];
        double inf=999999;
        int T;
        scanf("%d",&T);
        while(T--) {
            int N;
            scanf("%d",&N);
            for(int i=1; i<=N; i++) {
                dis[i]=inf;
                flag[i]=false;
            }
            for(int i=1; i<=N; i++) {
                for(int j=1; j<=N; j++) {
                    e[i][j]=inf;
                }
            }
            for(int i=1; i<=N; i++) {
                scanf("%d %d",&a[i].x,&a[i].y);
                for(int j=1; j<=N; j++) {
                    if(i==j)
                        continue;
                    else {
                        double l=sqrt(pow(a[i].x-a[j].x,2)+pow(a[i].y-a[j].y,2));
                        e[i][j]=l;
                        e[j][i]=l;
                    }
                }
            }
            double sum=0;
            dis[1]=0;
            bool x=false;
            while(true) {
                int v=-1;
                for(int u=1; u<=N; u++) {
                    if(!flag[u]&&(v==-1||dis[u]<dis[v]))
                        v=u;
                }
                if(v==-1)
                    break;
                flag[v]=true;
                if(dis[v]==inf) {
                    x=true;
                    break;
                } else
                    sum+=dis[v];
                for(int u=1; u<=N; u++) {
                    if(e[v][u]<10||e[v][u]>1000) {
                        continue;
                    }
                    dis[u]=min(dis[u],e[v][u]);
                }
            }
            if(x)
                printf("oh!
    ");
            else
                printf("%.1lf
    ",sum*100);
        }
        return 0;
    }
    

    题目地址:【杭电】[1875]畅通工程再续

  • 相关阅读:
    POJ 1811 Prime Test 素性测试 分解素因子
    sysbench的安装与使用
    电脑中已有VS2005和VS2010安装.NET3.5失败的解决方案
    I.MX6 show battery states in commandLine
    RPi 2B Raspbian system install
    I.MX6 bq27441 driver porting
    I.MX6 隐藏电池图标
    I.MX6 Power off register hacking
    I.MX6 Goodix GT9xx touchscreen driver porting
    busybox filesystem httpd php-5.5.31 sqlite3 webserver
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569772.html
Copyright © 2011-2022 走看看