#include<iostream>
#include <string.h>
using namespace std;
const int maxn = 1000;
int graph[maxn][maxn];
int dis[maxn];
int vis[maxn];
int n;
const int INF = 0x3f3f3f3f;
int tree(int r) {
int ans = 0;
memset(dis,0x3f,sizeof(dis));
memset(vis,0,sizeof(vis));
for (int i=0;i<n;i++) {
dis[i]=graph[r][i];
}
vis[r] =1;
for (int i=0;i<n-1;i++) {
int Min = INF;
int index = -1;
for (int j=0;j<n;j++) {
if(dis[j]<Min&&!vis[j]) {
Min= dis[j];
index = j;
}
}
if(index ==-1) break;
vis[index] = 1;
ans+=Min;
for(int j=0;j<n;j++) {
if(dis[j]>graph[index][j]&&!vis[j]) {
dis[j] = graph[index][j];
}
}
}
return ans;
}
int main() {
// freopen("datain.txt","r",stdin);
// freopen("dataout.txt","w",stdout);
while(cin>>n) {
for (int i=0;i<n;i++) {
for (int j=0;j<n;j++) {
cin>>graph[i][j];
}
}
int ans = tree(1);
cout<<ans<<endl;
}
}
Poj 1258
最新推荐文章于 2022-03-09 16:55:41 发布