zoukankan      html  css  js  c++  java
  • 洛谷P1546 最短网络 Agri-Net(Prim堆优化)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=5005;
     4 const int INF=0x3f3f3f3f;
     5 inline void read(int &tmp)
     6 {
     7     int x=1;char c=getchar();
     8     for(tmp=0;!isdigit(c);c=getchar()) if(c=='-') x=-1;
     9     for(;isdigit(c);tmp=tmp*10+c-48,c=getchar());
    10     tmp*=x;
    11 }
    12 int n,sum,tot,m,mp[maxn][maxn],w[maxn];
    13 typedef pair<int,int> P;
    14 priority_queue< P,vector<P>,greater<P> >q;
    15 bool v[maxn];
    16 void Prim()
    17 {
    18     memset(w,0x3f,sizeof(w));
    19     w[1]=0;q.push(make_pair(0,1));
    20     while(!q.empty())
    21     {
    22         int Top=q.top().second;q.pop();
    23         if(v[Top]) continue;
    24         v[Top]=1;sum+=w[Top];++tot;
    25         for(int i=1;i<=n;i++)
    26             if(mp[Top][i]<w[i]&&mp[Top][i]>0&&v[i]==false) {w[i]=mp[Top][i];q.push(make_pair(w[i],i));}
    27     }
    28 } 
    29 int main()
    30 {
    31     read(n);
    32     for(int i=1;i<=n;i++)
    33         for(int j=1;j<=n;j++)
    34                 {read(mp[i][j]);if(i==j) mp[i][j]=INF;}
    35     Prim();
    36     printf("%d",sum);
    37     return 0;
    38 }
  • 相关阅读:
    MongodDB数据库安装和简单使用
    比较运算符
    Java习题
    JavaScript示例
    Java面向过程练习题7
    Java面向过程练习题6
    倒金字塔
    包含contains
    String 比较
    单词表
  • 原文地址:https://www.cnblogs.com/yu-xing/p/10262054.html
Copyright © 2011-2022 走看看