1 int n;
2 int road[MAXN][MAXN];
3 int dis[MAXN];
4 bool vis[MAXN];
5 int prim() {
6 memset(vis, 0, sizeof(vis));
7 for(int i = 0; i < n; i++) dis[i] = INF;
8 dis[0] = 0;
9 int ans = 0;
10 for(int i = 0; i < n; i++) {
11 int tmp = INF, idx = 0;
12 for(int j = 0; j < n; j++) {
13 if(!vis[j] && dis[j] < tmp) {
14 tmp = dis[j];
15 idx = j;
16 }
17 }
18 vis[idx] = 1;
19 ans += tmp;
20 for(int j = 0; j < n; j++) {
21 if(!vis[j] && dis[j] > road[idx][j]) {
22 dis[j] = road[idx][j];
23 }
24 }
25 }
26 return ans;
27 }