Agri-Net POJ 1258(最小生成树模板)
Posted vbel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Agri-Net POJ 1258(最小生成树模板)相关的知识,希望对你有一定的参考价值。
原题
题目分析
比较明显的最小生成树模板题,题目给的输入是邻接矩阵,处理一下用prim算法就可以算出最小生成树了.
代码
1 #include <iostream> 2 #include <algorithm> 3 #include <utility> 4 #include <cstdio> 5 #include <cmath> 6 #include <cstring> 7 #include <string> 8 #include <vector> 9 #include <stack> 10 #include <queue> 11 #include <map> 12 #include <set> 13 14 using namespace std; 15 typedef long long LL; 16 const int INF_INT=0x3f3f3f3f; 17 const LL INF_LL=0x3f3f3f3f3f3f3f3f; 18 19 typedef pair<int,int> P; 20 21 int n; 22 int edge[100][100]; 23 bool used[100]; 24 25 int prim() 26 27 for(int i=0;i<n;i++) used[i]=false; 28 int ans=0; 29 priority_queue<P,vector<P>,greater<P> > que; 30 for(int i=1;i<n;i++) que.push(P(edge[0][i],i)); 31 used[0]=true; 32 while(que.size()) 33 34 P p=que.top();que.pop(); 35 if(used[p.second]) continue; 36 used[p.second]=true; 37 ans+=p.first; 38 for(int i=0;i<n;i++) 39 if(!used[i]) que.push(P(edge[p.second][i],i)); 40 41 return ans; 42 43 44 int main() 45 46 // freopen("black.in","r",stdin); 47 // freopen("black.out","w",stdout); 48 while(~scanf("%d",&n)) 49 50 for(int i=0;i<n;i++) 51 for(int j=0;j<n;j++) scanf("%d",&edge[i][j]); 52 printf("%d\n",prim()); 53 54 return 0; 55
以上是关于Agri-Net POJ 1258(最小生成树模板)的主要内容,如果未能解决你的问题,请参考以下文章