題意:鄰接村子裡面所有的村莊,使得道路的總長度最小。
分析:由於題意說會有已經通好道路的村莊。我們任然可以利用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取...