zoukankan      html  css  js  c++  java
  • 185. [USACO Oct08] 挖水井

    185. [USACO Oct08] 挖水井

    ★★   输入文件:water.in   输出文件:water.out   简单对比
    时间限制:1 s   内存限制:128 MB

    农夫约翰决定给他的N(1<=N<=300)个牧场浇水,这些牧场被自然的命名为1..N。他可以给一个牧场引入水通过在这个牧场挖一口井或者修一条管道使这个牧场和一个已经有水的牧场连接。

    在牧场i挖一口井的花费是w_i(1<=w_i<=100000)。修建一条水管连接牧场i和牧场j的花费是p_ij(1<=p_ij<=100000;p_ij=p_ji;p_ii=0)。

    请确定农夫约翰为了完成浇灌所有的牧场所需的最小的总花费。

    题目名称:water

    输入格式:

    • 第1行:一个单独的整数n。
    • 第2..n+1行:第i+1行包含一个单独的整数w_i。
    • 第n+2..2n+1行:第n+1+i行包含n个用空可分开的整数;其中第j个数是p_ij。

    输入样例(file water.in):

    4
    5
    4
    4
    3
    0 2 2 2
    2 0 3 3
    2 3 0 4
    2 3 4 0
    

    输入说明:

    这里有4个牧场,修井和修管道的代价如图。

    输出格式:

    • 第1行:一个单独的整数,表示花费。

    输出样例(file water.out):

    9
    

    输出说明:

    农夫约翰可以在第4个牧场修井,并且将每个牧场和第一个连接起来,这样,花费是3+2+2+2=9。

     20 #include<iostream>
     21 #include<cstdio>
     22 #include<algorithm>
     23 using namespace std;
     24 const int N=100001;
     25 const int maxn=0x7fffffff;
     26 int fa[N];
     27 struct node{
     28     int u,v,w;
     29 }e[N];
     30 int find(int x)
     31 {
     32     if(fa[x]!=x)
     33      {
     34          fa[x]=find(fa[x]);
     35      }
     36      return fa[x];
     37 }
     38 void un(int x,int y)
     39 {
     40     int r=find(x);
     41     int rr=find(y);
     42     fa[r]=rr;
     43 }
     44 int cmp( node  a,node  b)
     45 {
     46     return a.w<b.w;
     47 }
     48 int n;
     49 int tot;
     50 int w[N];
     51 int num=1;
     52 int main()
     53 {
     54     freopen("water.in","r",stdin);
     55     freopen("water.out","w",stdout);
     56     scanf("%d",&n);
     57     for(int i=1;i<=n;i++)
     58      {
     59          fa[i]=i;
     60      }
     61      for(int i=1;i<=n;i++)
     62       {
     63           scanf("%d",&w[i]);
     64       }
     65       for(int i=1;i<=n;i++)
     66        {
     67            for(int j=1;j<=n;j++)
     68             {
     69                 scanf("%d",&e[num].w);
     70                 e[num].u=i;
     71                 e[num].v=j;
     72                 num++;
     73             }
     74        }
     75        for(int i=1;i<=n;i++)
     76         {
     77             e[num].u=i;
     78             e[num].v=n+1;
     79             e[num].w=w[i];
     80             num++;
     81         }
     82         sort(e+1,e+num,cmp);
     83         long long int ans=0;
     84         int k=0;
     85         for(int i=1;i<=num;i++)
     86          {
     87              if(find(e[i].u)!=find(e[i].v))
     88               {
     89                 un(e[i].u,e[i].v);
     90                   ans+=e[i].w;
     91                   k++;
     92              }
     93                   if(k==n)
     94                    {
     95                        break;
     96                  }
     97          }
     98          printf("%lld",ans);
     99          fclose(stdin);
    100          fclose(stdout);
    101          return 0;
    102 }
    103 
    104     #include<iostream>
    105     #include<cstdio>
    106     #include<algorithm>
    107     using namespace std;
    108     const int N=100001;
    109     const int maxn=0x7fffffff;
    110     int fa[N];
    111     struct node{
    112         int u,v,w;
    113     }e[N];
    114     int find(int x)
    115     {
    116         if(fa[x]!=x)
    117          {
    118              fa[x]=find(fa[x]);
    119          }
    120          return fa[x];
    121     }
    122     void un(int x,int y)
    123     {
    124         int r=find(x);
    125         int rr=find(y);
    126         fa[r]=rr;
    127     }
    128     int cmp( node  a,node  b)
    129     {
    130         return a.w<b.w;
    131     }
    132     int n;
    133     int tot;
    134     int w[N];
    135     int num=1;
    136     int main()
    137     {
    138         freopen("water.in","r",stdin);
    139         freopen("water.out","w",stdout);
    140         scanf("%d",&n);
    141         for(int i=1;i<=n;i++)
    142          {
    143              fa[i]=i;
    144          }
    145          for(int i=1;i<=n;i++)
    146           {
    147               scanf("%d",&w[i]);
    148           }
    149           for(int i=1;i<=n;i++)
    150            {
    151                for(int j=1;j<=n;j++)
    152                 {
    153                     scanf("%d",&e[num].w);
    154                     e[num].u=i;
    155                     e[num].v=j;
    156                     num++;
    157                 }
    158            }
    159            for(int i=1;i<=n;i++)
    160             {
    161                 e[num].u=i;
    162                 e[num].v=n+1;
    163                 e[num].w=w[i];
    164                 num++;
    165             }
    166             sort(e+1,e+num,cmp);
    167             long long int ans=0;
    168             int k=0;
    169             for(int i=1;i<=num;i++)
    170              {
    171                  if(find(e[i].u)!=find(e[i].v))
    172                   {
    173                     un(e[i].u,e[i].v);
    174                       ans+=e[i].w;
    175                       k++;
    176                  }
    177                       if(k==n)
    178                        {
    179                            break;
    180                      }
    181              }
    182              printf("%lld",ans);
    183              fclose(stdin);
    184              fclose(stdout);
    185              return 0;
    186     }
  • 相关阅读:
    ES6/ES2015核心内容 import export
    JavaScript 标准参考教程(alpha) 阮一峰
    NPM 学习笔记整理
    (尚026)Vue_案例_动态初始化显示(尚025)
    (尚025)Vue_案例_静态组件
    (尚024)Vue_案例_交互删除
    (尚023)Vue_案例_交互添加
    (尚022)Vue案例_初始化显示(十分详细!!!)
    (尚021)Vue_eslint编码规范检查
    (尚020)Vue打包发布项目
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6734266.html
Copyright © 2011-2022 走看看