USACO Section 3.1: Agri-Net

minimal spanning tree的经典题

 1 /*

 2 ID: yingzho1

 3 LANG: C++

 4 TASK: agrinet

 5 */

 6 #include <iostream>

 7 #include <fstream>

 8 #include <string>

 9 #include <map>

10 #include <vector>

11 #include <set>

12 #include <algorithm>

13 #include <stdio.h>

14 #include <queue>

15 #include <cstring>

16 #include <cmath>

17 #include <list>

18 

19 using namespace std;

20 

21 ifstream fin("agrinet.in");

22 ofstream fout("agrinet.out");

23 

24 const int inf = 100000;

25 

26 int N;

27 int dist[110][110];

28 int dis[110];

29 int total_dist = 0;

30 

31 void prim() {

32     for (int i = 0; i < N; i++) dis[i] = inf;

33     bool visit[110] = {false};

34     int s = 0;

35     int min_w;

36     int flag;

37     visit[s] = true;

38 

39     for (int i = 1; i < N; i++) {

40         min_w = inf;

41         for (int j = 1; j < N; j++) {

42             if (!visit[j] && dis[j] > dist[s][j]) dis[j] = dist[s][j];

43             if (!visit[j] && min_w > dis[j]) {

44                 min_w = dis[j];

45                 //cout << min_w << endl;

46                 flag = j;

47             }

48         }

49         s = flag;

50         visit[s] = true;

51         total_dist += min_w;

52     }

53 }

54 

55 int main()

56 {

57     fin >> N;

58     for (int i = 0; i < N; i++) {

59         for (int j = 0; j < N; j++) {

60             fin >> dist[i][j];

61         }

62     }

63     prim();

64     fout << total_dist << endl;

65 

66     return 0;

67 }

 

你可能感兴趣的:(USACO)