zoukankan      html  css  js  c++  java
  • P2212 [USACO14MAR]浇地Watering the Fields

     题面传送门

    解析:

    本题十分简单,我认为不应该是一道绿题,只需要建一个完全图,然后在建边之前判断是否大于c即可。然后跑一边最小生成树,Kruskal,如果可以的话输出重量,否则输出-1即可。参考程序如下:

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 int n,c,sum,a[225000],b[225001],tmp,weight,u,v,parent[225000],num,x,y;
     5 struct node
     6 {
     7     int u,v,w;
     8 };
     9 node f[10000001];
    10 bool cmp(node a,node b)
    11 {
    12     return a.w<b.w;
    13 }
    14 int find(int x)
    15 {
    16     if(parent[x]==x)return x;
    17     return parent[x]=find(parent[x]);
    18 }
    19 int main()
    20 {
    21     //freopen("1.in","r",stdin);
    22     cin>>n>>c;
    23     for(int i=1;i<=n;i++)
    24     {
    25         cin>>a[i]>>b[i];
    26     }
    27     for(int i=1;i<=n;i++)
    28     {
    29         for(int j=1;j<i;j++)
    30         {
    31             //cout<<"CJXGBH_____________________________________________"<<endl;
    32             if(i==j)continue;
    33             tmp=(a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j]);
    34             if(tmp>=c)
    35             {
    36                 sum++;
    37                 f[sum].u=i;
    38                 f[sum].v=j;
    39                 f[sum].w=tmp;
    40             }
    41         }
    42     }
    43     sort(f+1,f+sum+1,cmp);
    44     for(int i=1;i<=n;i++)
    45     {
    46         parent[i]=i;
    47     }
    48     for(int i=1;i<=sum;i++)
    49     {
    50         u=f[i].u;v=f[i].v;
    51         x=find(u);
    52         y=find(v);
    53         if(x!=y)
    54         {
    55             num++;
    56             weight+=f[i].w;
    57             parent[x]=y;
    58         }
    59         if(num==n-1)
    60         {
    61             break;
    62         }
    63     }
    64     if(num==n-1)cout<<weight;
    65     else cout<<"-1";
    66     return 0;
    67 }
    View Code
  • 相关阅读:
    npm命令
    前端单元测试工具karma和jest
    加解密学习之--模运算与经典密码学
    数据结构之-翻转二叉树
    数据结构之-链表倒转
    转载:MQ
    分布式ID生成器 待整理
    软件开发中的负载均衡
    制作软件过程中所产出的文档(请补充)
    多线程的创建
  • 原文地址:https://www.cnblogs.com/szmssf/p/10988118.html
Copyright © 2011-2022 走看看