//poj 1258-Agri-net /* * 图论-最小生成树 * prim+priority_queue(邻接矩阵) 实现 * !!!有多组数据 * wa wa wa ac 248k 0ms */ #include <iostream> #include <algorithm> #include <queue> #include <utility> #include <string> #include <cstdio> #include <cstring> #include <cstdlib> using namespace std; typedef pair<int,int> pii; #define MAXN 110 #define INF 0x7f7f7f7f int n; int map[MAXN][MAXN],dist[MAXN]; bool vis[MAXN]; priority_queue< pii,vector<pii>,greater<pii> > q; void prim() { int sum=0; memset(vis,false,sizeof(vis)); fill(dist,dist+n,INF); dist[0]=0; q.push(make_pair(dist[0],0)); while(!q.empty()){ pii u=q.top(); q.pop(); int x=u.second; if(vis[x]) continue; vis[x]=true; sum+=dist[x]; for(int i=0; i!=n; ++i){ if(!vis[i] && map[x][i]<dist[i]){ dist[i]=map[x][i]; q.push(make_pair(dist[i],i)); } } } printf("%d/n",sum); } void init() { int i,j; while(scanf("%d",&n)!=EOF){ memset(map,0,sizeof(map)); for(i=0; i!=n; ++i) for(j=0; j!=n; ++j) scanf("%d",&map[i][j]); prim(); } } int main(void) { init(); return 0; }