标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 46319 | Accepted: 19052 |
Description
Input
Output
Sample Input
4 0 4 9 21 4 0 8 17 9 8 0 16 21 17 16 0
Sample Output
28
Source
/* ID: LinKArftc PROG: 1258.cpp LANG: C++ */ #include <map> #include <set> #include <cmath> #include <stack> #include <queue> #include <vector> #include <cstdio> #include <string> #include <utility> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define eps 1e-8 #define randin srand((unsigned int)time(NULL)) #define input freopen("input.txt","r",stdin) #define debug(s) cout << "s = " << s << endl; #define outstars cout << "*************" << endl; const double PI = acos(-1.0); const double e = exp(1.0); const int inf = 0x3f3f3f3f; const int INF = 0x7fffffff; typedef long long ll; const int maxn = 110; int mp[maxn][maxn]; int dis[maxn]; bool vis[maxn]; int n; int prim() { int ret = 0; for (int i = 2; i <= n; i ++) dis[i] = mp[i][1]; dis[1] = 0; vis[1] = true; int ii = 1; for (int i = 2; i <= n; i ++) { int mi = inf; for (int j = 1; j <= n; j ++) { if (!vis[j] && dis[j] < mi) { mi = dis[j]; ii = j; } } vis[ii] = true; ret += dis[ii]; for (int j = 1; j <= n; j ++) { if (!vis[j] && dis[j] > mp[j][ii]) dis[j] = mp[j][ii]; } } return ret; } int main() { //input; while (~scanf("%d", &n)) { memset(mp, 0x3f, sizeof(mp)); memset(vis, 0, sizeof(vis)); for (int i = 1; i <= n; i ++) { for (int j = 1; j <= n; j ++) scanf("%d", &mp[i][j]); } printf("%d\n", prim()); } return 0; }
标签:
原文地址:http://www.cnblogs.com/LinKArftc/p/4905681.html