POJ2421 prim演算法求最小生成樹

2022-09-08 16:42:46 字數 2710 閱讀 4169

題意:鄰接村子裡面所有的村莊,使得道路的總長度最小。

分析:由於題意說會有已經通好道路的村莊。我們任然可以利用prim求解最小生成樹,只要把已經通好道路的權值置為0,就行了。

view code

1

//i'm the topcoder2//

c3 #include 4 #include 5 #include

6 #include 7 #include 8 #include 9

//c++

10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include

19 #include 20 #include 21 #include 22 #include 23 #include 24 #include

25using

namespace

std;

2627

//*************************output*************************

28#ifdef win32

29#define int64 "%i64d"

30#define uint64 "%i64u"

31#else

32#define int64 "%lld"

33#define uint64 "%llu"

34#endif

3536

//**************************constant***********************

37#define inf 0x3f3f3f3f

38#define eps 1e-8

39#define pi acos(-1.)

40#define pi2 asin (1.);

41 typedef long

long

ll;42

//typedef __int64 ll;

//codeforces

43 typedef unsigned int

ui;44 typedef unsigned long

long

ui64;

45#define mp make_pair

46 typedef vectorvi;

47 typedef pairpii;

48#define pb push_back

49#define mp make_pair

5051

//***************************sentence************************

52#define cl(a,b) memset (a, b, sizeof (a))

53#define sqr(a,b) sqrt ((double)(a)*(a) + (double)(b)*(b))

54#define sqr3(a,b,c) sqrt((double)(a)*(a) + (double)(b)*(b) + (double)(c)*(c))

5556

//****************************function************************

57 template double dis(t va, t vb)

58 template inline t integer_len(t v)

59 template inline t square(t va, t vb)

6061

//aply for the memory of the stack

62//

#pragma comment (linker, "/stack:1024000000,1024000000")

63//

end64

65#define maxn 2000+10

66int

n,m;

67int edge[maxn][maxn];//

鄰接矩陣

68int

lowcost[maxn];

69int

nearvex[maxn];

70int sumweight=0;71

void prim(int

u0)79 nearvex[u0]=-1;80

for(int i=1;i)89}

90if(v!=-1

)100

}101

}102

}103 printf("

%d\n

",sumweight);

104}

105106

intmain()

115 edge[i][i]=0

;116

}117

for(int i=1;i<=n;i++)

122}

123 scanf("

%d",&m);

124for(int i=1;i<=m;i++)

128//

for(int i=1;i<=n;i++)

133//

}134 prim(1

);135

}136

return0;

137 }

Prim演算法求最大權,POJ 2485

解題報告 這裡有一點要注意的是,第乙個點時,dis陣列還沒有初始化,還全部為inf。第一次來到更新權時,才把鄰接矩陣的資料存到dis中。include include include include include using namespace std define n 10005 define ...

prim演算法求最小生成樹和迪傑斯特拉求最短路

intpr if sma inf break 表示所有點都已經標記 nod pos 1 標記這個點加入最小樹 lar max sma,lar 求出需要建設的路中最長的一條,題目需要 for int j 0 jreturn lar dis j 代表從乙個固定點到點j的距離 l i j 代表點i到點j的...

Prim演算法和Kruskal演算法求最小生成樹

連通分量是指圖的乙個子圖,子圖中任意兩個頂點之間都是可達的。最小生成樹是連通圖的乙個連通分量,且所有邊的權值和最小。最小生成樹中,乙個頂點最多與兩個頂點鄰接 若連通圖有n個頂點,則最小生成樹中一定有n 1條邊。prim演算法需要兩個線性表來進行輔助 標記已經加入生成樹的頂點 它的功能可以由tree取...