标签:pair fir 模板题 col nbsp air 输入 typedef priority
比较明显的最小生成树模板题,题目给的输入是邻接矩阵,处理一下用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 }
标签:pair fir 模板题 col nbsp air 输入 typedef priority
原文地址:https://www.cnblogs.com/VBEL/p/11419288.html