• USACO Agri-Net 3.1


    用的kruskal求最小生成树,开始想着用一维数组 判断是否存在环,后来一想不对,可能每个点都放连到,但是路径之间不连通...

    还是得换二维,再就是set里判断元素相等是根据A<B==FALSE&&B<A==FALSE 要注意,不行就换multiset...

      1 /*
      2 
      3 ID: hubiao cave
      4 
      5 PROG: agrinet
      6 
      7 LANG: C++
      8 
      9 */
     10 
     11 
     12 
     13 
     14 #include<iostream>
     15 
     16 #include<fstream>
     17 #include<cstring>
     18 #include<string>
     19 
     20 #include<set>
     21 #include<utility>
     22 using namespace std;
     23 
     24 #define MAX 888888
     25 
     26 struct node
     27 {
     28     int w;
     29     pair<int,int> p;
     30 };
     31 
     32 bool operator <(const node&,const node&);
     33 bool operator ==(const node&,const node&);
     34 int main()
     35 
     36 {
     37 
     38     ifstream fin("agrinet.in");
     39     ofstream fout("agrinet.out");
     40     
     41     int A[102][102],B[102];
     42     int num;
     43     int temp;
     44     int res=0;
     45     multiset<node> sn;
     46 
     47     for(int i=0;i<=101;i++)
     48         memset(A[i],0,102*4);
     49 
     50     
     51   fin>>num;
     52 
     53       /*node n1,n2;
     54     n1.w=n2.w=4;
     55     n1.p.first=3;
     56     n1.p.second=6;
     57     n2.p.first=4;
     58     n2.p.second=5;
     59     int m=!(n1<n2||n2<n1);*/
     60 
     61     for(int i=1;i<=num;i++)
     62     {
     63         B[i]=1;
     64         for(int j=1;j<=num;j++)
     65         {
     66             fin>>temp;
     67             if(temp==0)
     68                 continue;
     69             else
     70             {
     71                 if((num-i+1)+j>num)
     72                 {
     73                 node n;
     74                 n.w=temp;
     75                 n.p.first=i;
     76                 n.p.second=j;
     77                 sn.insert(n);
     78                 }
     79             }
     80         }
     81     }
     82 
     83 
     84 
     85     for(set<node>::iterator it=sn.begin();it!=sn.end();it++)
     86     {
     87         if(A[it->p.first][it->p.second])
     88             continue;
     89         else
     90         {
     91             A[it->p.first][it->p.second]=1;
     92             A[it->p.second][it->p.first]=1;
     93             res+=it->w;
     94             for(int i=1;i<=num;i++)
     95             {
     96                 for(int j=1;j<=num;j++)
     97                 {
     98                     if(A[i][j]==1)
     99                     {
    100                         for(int m=1;m<=num;m++)
    101                             if(A[j][m])
    102                                 A[i][m]=1;
    103                     }
    104                 }
    105             }
    106         }
    107     }
    108     fout<<res<<endl;
    109 
    110 
    111     return 0;
    112 
    113 
    114 }
    115 bool operator < (const node& n1,const node&n2)
    116 {
    117     return n1.w<n2.w;
    118 }
  • 相关阅读:
    ionic 刷新页面的几种方法
    Highcharts中如何外部修改pointStart
    前端分页 思路
    快捷选时间
    获取今天,昨天,本周,上周,本月,上月时间
    angularjs 弹出框 $modal
    SQL 查找存在某内容的存储过程都有哪些
    LINQ to SQL和Entity Framework
    SQL模糊查询条件的四种匹配模式
    数据库--中文表名及字段名的优缺点
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3333749.html
Copyright © 2020-2023  润新知